Kotlin安卓应用接入Firebase后启动崩溃、无法显示登录界面如何解决?
问题原因及解决方案
核心错误点
- 你将
findViewById(R.id.buGotosub)的调用写在了MainActivity的类成员属性初始化阶段,此时Activity还未执行onCreate生命周期方法,setContentView(R.layout.activity_main)还没调用,布局未加载到Activity中,调用findViewById只会返回null,你用非空类型接收直接触发空指针异常,导致App启动直接崩溃,布局自然无法显示。
修复步骤
- 把button属性的初始化挪到
onCreate方法的setContentView调用之后,或者把属性声明为lateinit延迟初始化,修复后的完整代码如下:
import android.content.Intent import android.os.Bundle import android.widget.Button import androidx.appcompat.app.AppCompatActivity import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseUser class MainActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth // 修改为lateinit延迟初始化,不在类初始化阶段调用findViewById private lateinit var button: Button override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // setContentView执行、布局加载完成后再初始化控件 button = findViewById(R.id.buGotosub) auth = FirebaseAuth.getInstance() button.setOnClickListener { startActivity(Intent(this,SubscribAcc::class.java)) finish() } } public override fun onStart() { super.onStart() val currentUser = auth.currentUser updarUI(currentUser) } fun updarUI(currentUser : FirebaseUser?){ } }
其他需检查项
- 确认
google-services.json文件已经放到app模块根目录,项目根目录build.gradle和app模块build.gradle已经正确添加Firebase对应的依赖和插件配置 - 确认
activity_main.xml布局中确实存在id为buGotosub的Button控件,id拼写完全一致 - 确认你已经在AndroidManifest.xml中注册了
SubscribAccActivity,避免跳转时抛出组件未找到异常
内容的提问来源于stack exchange,提问作者Amine Bouhabinie
相关产品推荐
相关产品推荐

