I'm learning Kotlin and Android Development and I want to go to my dashboard (another activity) when I successfully login, but when I try to, my app keeps crashing and I do not know why. I've searched for many solutions but they're years old so maybe that is why it is not working.
MainActivity Code:
package com.example.firstkotlin
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.TextUtils
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import kotlinx.android.synthetic.main.activity_login.*
class MainActivity : AppCompatActivity() {
lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
val currentUser = auth.currentUser
if (currentUser != null) {
val intent = Intent(this@MainActivity, dashboard::class.java)
startActivity(intent)
finish()
}
login()
}
private fun login() {
loginButton.setOnClickListener {
if (TextUtils.isEmpty(emailLogin.text.toString())) {
emailLogin.error = "Please enter registered email."
return@setOnClickListener
} else if (TextUtils.isEmpty(passwordLogin.text.toString())) {
passwordLogin.error = "Please enter password."
return@setOnClickListener
}
auth.signInWithEmailAndPassword(emailLogin.text.toString(), passwordLogin.text.toString())
.addOnCompleteListener {
if (it.isSuccessful) {
val intent = Intent(this@MainActivity, dashboard::class.java)
startActivity(intent)
finish()
} else {
Toast.makeText(
this@MainActivity,
"Login failed, please try again! ",
Toast.LENGTH_LONG
).show()
}
}
}
registerText.setOnClickListener {
val intent = Intent(this@MainActivity, registration::class.java)
startActivity(intent)
finish()
}
}
}
Dashboard Code:
package com.example.firstkotlin
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_dashboard.*
class dashboard : AppCompatActivity() {
lateinit var auth: FirebaseAuth
var databaseReference : DatabaseReference? = null
var database: FirebaseDatabase? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dashboard)
auth = FirebaseAuth.getInstance()
database = FirebaseDatabase.getInstance()
databaseReference = database?.reference!!.child("profile")
}
private fun loadProfile(){
val user = auth.currentUser
val userreference = databaseReference?.child(user?.uid!!)
userreference?.addValueEventListener(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
completeName.text = "User -- >" +snapshot.child("fullname").value.toString()
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
logoutButton.setOnClickListener {
auth.signOut()
startActivity(Intent(this@dashboard, MainActivity::class.java))
finish()
}
}
}
UPDATE! Here's a stack trace:
03/24 17:12:49: Launching 'app' on No Devices.
Install successfully finished in 537 ms.
$ adb shell am start -n "com.example.firstkotlin/com.example.firstkotlin.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 6798 on device 'emulator-5554'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
W/ComponentDiscovery: Class com.google.firebase.dynamicloading.DynamicLoadingRegistrar is not an found.
I/FirebaseApp: Device unlocked: initializing all Firebase APIs for app [DEFAULT]
I/FirebaseInitProvider: FirebaseApp initialization successful
D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so
D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so
I/FirebaseAuth: [FirebaseAuth:] Preparing to create service connection to fallback implementation
W/ple.firstkotli: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)
W/ple.firstkotli: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.firstkotlin, PID: 6798
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.firstkotlin/com.example.firstkotlin.dashboard}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:696)
at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:659)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:552)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.example.firstkotlin.dashboard.onCreate(dashboard.kt:20)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/Process: Sending signal. PID: 6798 SIG: 9