【问题标题】:Firebase kotlin android studio app crashing on second activityFirebase kotlin android studio 应用程序在第二次活动时崩溃
【发布时间】:2021-03-20 22:26:47
【问题描述】:

我正在关注这个 youtube 教程 (https://www.youtube.com/watch?v=0hkyXuKTFYY),但发生了以下情况。对于视频中的他来说,在 6 点 30 分,他的应用程序也崩溃了,但他在视频中稍后解决了这个问题。对我来说,似乎没有任何效果。

请帮忙!

这是我的日志:

12-09 19:36:45.321 28337-28337/? E/Zygote: v2
12-09 19:36:45.331 28337-28337/? E/Zygote: accessInfo : 0
12-09 19:36:47.831 28337-28337/konark.studios.ourtimetable E/AndroidRuntime: FATAL EXCEPTION: main
    Process: konark.studios.ourtimetable, PID: 28337
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{konark.studios.ourtimetable/konark.studios.ourtimetable.RegisterActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3132)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
        at android.app.ActivityThread.access$1100(ActivityThread.java:229)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:7325)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:162)
        at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:109)
        at android.content.Context.obtainStyledAttributes(Context.java:514)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:839)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
        at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:630)
        at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:223)
        at konark.studios.ourtimetable.RegisterActivity.<init>(RegisterActivity.kt:20)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1096)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3122)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:7325) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

第一个 Activity 照常打开:## Heading ## enter image description here

当我按下创建帐户按钮(在底部)时,它应该移动到第二个活动。但不幸的是,它崩溃了。

第二个活动的代码(即崩溃):

package konark.studios.ourtimetable

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Patterns
import android.view.WindowManager
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class RegisterActivity : AppCompatActivity() {

    var registerBtn = findViewById<Button>(R.id.RegisterButton)
    var usernamebox = findViewById<EditText>(R.id.emailbox)
    var passwordbox = findViewById<EditText>(R.id.passwordbox)
    val intentLoginActivity = Intent(this, LoginActivity::class.java)
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
        setContentView(R.layout.activity_register)
        supportActionBar?.hide();
        auth = Firebase.auth

        registerBtn.setOnClickListener {
            signUpUser()
        }
    }

    private fun signUpUser() {

        if (usernamebox.text.toString().isEmpty()) {
            usernamebox.error = "Please enter your email"
            usernamebox.requestFocus()
            return
        }

        if (Patterns.EMAIL_ADDRESS.matcher(usernamebox.text.toString()).matches()) {
            usernamebox.error = "Please enter a valid email"
            usernamebox.requestFocus()
            return
        }

        if (passwordbox.text.toString().isEmpty()) {
            passwordbox.error = "Please enter a password"
            passwordbox.requestFocus()
            return
        }

        auth.createUserWithEmailAndPassword(usernamebox.text.toString(), passwordbox.text.toString())
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        startActivity(Intent(intentLoginActivity))
                    } else {
                        Toast.makeText(baseContext, "Authentication failed",
                                Toast.LENGTH_SHORT).show()
                    }
                }
    }
}

这是第一个作为主屏幕的活动的代码:

package konark.studios.ourtimetable

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.AlarmClock.EXTRA_MESSAGE
import android.util.Log
import android.view.Window
import android.view.WindowManager
import android.widget.Button
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class LoginActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
        setContentView(R.layout.activity_login)
        supportActionBar?.hide();
        auth = Firebase.auth

        var createAccountBtn = findViewById<Button>(R.id.AccountCreation)
        val intentAccountCreate = Intent(this, RegisterActivity::class.java)
        createAccountBtn.setOnClickListener {
            Log.d("Action","Register Button Clicked")
            startActivity(intentAccountCreate)
            finish()
        }
    }

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }

    private fun updateUI(currentUser: FirebaseUser?) {

    }
}

【问题讨论】:

    标签: android firebase kotlin


    【解决方案1】:
    var registerBtn = findViewById<Button>(R.id.RegisterButton)
    var usernamebox = findViewById<EditText>(R.id.emailbox)
    var passwordbox = findViewById<EditText>(R.id.passwordbox)
    val intentLoginActivity = Intent(this, LoginActivity::class.java)
    

    将这些函数调用从属性初始值设定项移至onCreate() 函数。

    在初始化阶段,将Activity 用作Context 或设置活动窗口以便调用findViewById() 还为时过早。 (同样在setContentView() 之前,你只会得到空值。)

    【讨论】:

    • 感谢您让我知道这一点,但不幸的是,这并没有帮助。注释掉 signUpUser() 函数也会返回相同的错误。
    【解决方案2】:

    首先确保您的 Activity 在您的 AndroidManifest 文件中声明。 那就试试吧:

    createAccountBtn.setOnClickListener {
        val intentAccountCreate = Intent(context, RegisterActivity::class.java)
        Log.d("Action","Register Button Clicked")
        startActivity(intentAccountCreate)
        finish()
    }
    

    尝试按以下方式进行

    【讨论】:

    • @AbhinavPrabhakar 尝试对部分进行评论:window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) 或通过执行 this.window.setFlags 等
    • :(还是一样
    • @AbhinavPrabhakar 您确定您的活动已在您的 AndroidManifest.xml 文件中声明吗?
    • 是的。一个 youtube 视频说该错误可能是由于旧版本的依赖项造成的,我升级了它们但仍然相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多