java.lang.RuntimeException: Unable to start activity Compone



我正在开发新的应用程序,但当我在调试模式下运行项目时,我得到以下异常

java.lang.RuntimeException: Unable to start activity ComponentInfo{at.mksquad.swapit/at.mksquad.swapit.ui.screenflow.main.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2976)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6820)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922)
Caused by: java.lang.NullPointerException
at at.mksquad.swapit.data.sources.auth.AuthSourceFirebase.getUidOfLoggedInUser(AuthSourceFirebase.kt:18)
at at.mksquad.swapit.features.auth.AuthManager.getUidOfLoggedInUser(AuthManager.kt:28)
at at.mksquad.swapit.data.repositories.UserRepository.getUid(UserRepository.kt:30)
at at.mksquad.swapit.utils.UserUtil.createNewUser(UserUtil.kt:17)
at at.mksquad.swapit.data.repositories.UserRepository.loadUser(UserRepository.kt:90)
at at.mksquad.swapit.ui.screenflow.main.SharedViewModel.<init>(SharedViewModel.kt:12)
at at.mksquad.swapit.ui.screenflow.main.SharedViewModelFactory.create(SharedViewModelFactory.kt:14)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)
at at.mksquad.swapit.ui.screenflow.main.MainActivity.getSharedViewModel(Unknown Source:2)
at at.mksquad.swapit.ui.screenflow.main.MainActivity.prepareViews(MainActivity.kt:765)
at at.mksquad.swapit.ui.screenflow.main.MainActivity.onCreate(MainActivity.kt:194)
at android.app.Activity.performCreate(Activity.java:7224)

at android.app.Activity.performCreate(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2956)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3113) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:113) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:71) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1858) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:201) 
at android.app.ActivityThread.main(ActivityThread.java:6820) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922) 

在我的MainActivity下面。Kt https://gist.github.com/kyodgorbek/2a369fcbb2138cb9e25c0855514dc162代码

我想知道我到底在哪里犯了错误,我已经运行调试模式,但一步一步运行,但它没有显示任何东西,但在AuthSourceFirebase.kt中指出以下代码中的异常

object AuthSourceFirebase {
fun isUserLoggedIn(): Boolean {
return FirebaseAuth.getInstance().currentUser != null
}
fun getUidOfLoggedInUser(): String {
return FirebaseAuth.getInstance().currentUser!!.uid // this line cause exception
}
fun loginUser(
activity: Activity,
mail: String,
password: String,
loginCallback: AuthManager.UserLoginCallback
) {
Timber.d("Starting process to login..")
FirebaseAuth.getInstance().signInWithEmailAndPassword(
mail,
password
).addOnCompleteListener(activity) {
if (it.isSuccessful) {
loginCallback.onCallback(null)
}
}
.addOnFailureListener { e ->
val error = e as FirebaseAuthException
Timber.d("Error logging in, code: %s", error.errorCode)
loginCallback.onCallback(
LibFirebaseErrors.getErrorFromErrorCode(
activity,
error.errorCode
)
)
}
}
fun registerUser(
activity: Activity,
mail: String,
password: String,
registrationCallback: AuthManager.UserRegistrationCallback
) {
Timber.d("Starting process to register..")
FirebaseAuth.getInstance().createUserWithEmailAndPassword(
mail,
password
).addOnCompleteListener(activity) {
if (it.isSuccessful) {
registrationCallback.onCallback(null)
}
}
.addOnFailureListener { e ->
val error = e as FirebaseAuthException
Timber.d("Error logging in, code: %s", error.errorCode)
registrationCallback.onCallback(
LibFirebaseErrors.getErrorFromErrorCode(activity, error.errorCode)
)
}
}
fun sendPasswordResetMail(
activity: Activity,
mail: String,
resetPwMailCallback: AuthManager.UserResetPwMailCallback
) {
Timber.d("Starting process to reset password..")
FirebaseAuth.getInstance().sendPasswordResetEmail(mail)
.addOnCompleteListener(activity) {
if (it.isSuccessful) {
resetPwMailCallback.onCallback(null)
}
}
.addOnFailureListener { e ->
val error = e as FirebaseAuthException
Timber.d("Error sending mail, code: %s", error.errorCode)
resetPwMailCallback.onCallback(
LibFirebaseErrors.getErrorFromErrorCode(
activity,
error.errorCode
)
)
}
}
fun logUserOut(context: Context){
UserRepository.deleteUserLocal(context)
FirebaseAuth.getInstance().signOut()
}
}

我已经尝试了我的,以避免以下方式nullpointer异常它没有工作

fun getUidOfLoggedInUser(): String {
if(FirebaseAuth.getInstance().currentUser?.uid == null){
FirebaseAuth.getInstance().signOut()
}
return FirebaseAuth.getInstance().currentUser!!.uid
}

你得到的错误看起来像一个常规的空指针异常。根据这里的异常堆栈跟踪:

Caused by: java.lang.NullPointerException
at at.mksquad.swapit.data.sources.auth.AuthSourceFirebase.**getUidOfLoggedInUser(AuthSourceFirebase.kt:18)**
at at.mksquad.swapit.features.auth.AuthManager.getUidOfLoggedInUser(AuthManager.kt:28)
at at.mksquad.swapit.data.repositories.UserRepository.getUid(UserRepository.kt:30)

fun getUidOfLoggedInUser(): String {
return FirebaseAuth.getInstance().currentUser!!.uid // this line cause exception
}

确保你的currentUser不为空。请检查Firebase身份验证是否正在处理,当前用户会话是否处于活动状态。

像这样更新你的代码:

**fun getUidOfLoggedInUser(): String {
if(FirebaseAuth.getInstance().currentUser == null || FirebaseAuth.getInstance().currentUser?.uid == null){
FirebaseAuth.getInstance().signOut() return
}
return FirebaseAuth.getInstance().currentUser!!.uid
}**

相关内容

最新更新