我正在尝试通过在导航抽屉中设置TextView的文本来创建一种在活动开始时更新UI的方法。我一直收到TextView不能为空的错误?
我得到的错误是非法状态异常userEmail不能为空
这是应该更新导航栏中的个人资料信息的updateUI
private fun updateUI(user:FirebaseUser?) {
if (user != null) {
val userEmailText = findViewById<TextView>(R.id.userEmail)
userEmail.text = user.email
val errorTriage : String? = user.email
println("User Email is ="+errorTriage)
} else {
val userEmailText: TextView = findViewById(R.id.userEmail)
userEmailText.text = "Johndoe@someemail.com"
userNameText.text = "John Doe"
}}
如果用户已登录,这是对UpdateUI的调用,如果这样更新导航抽屉中的配置文件数据,那么问题是什么。如果没有,它会启动FirebaseUI登录活动。
override fun onStart() {
super.onStart()
//Checks to see if user is already signed in
if (mAuth.currentUser != null) {
updateUI(mAuth.currentUser)
} else {
//user is not signed in
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder().build(),
RC_SIGN_IN)
}}
这是布局
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
app:srcCompat="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/userName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="Android Studio"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/userEmail"
android:layout_width="wrap_content"
答案 0 :(得分:0)
对不起,我整夜都在努力工作并发布了生气的代码lol。我将代码更新为问题所在。我还意识到我将值命名为userEmailText并且正在尝试设置
userEmail.text = user.email
而不是
userEmailText.text = user.email
这可以解释为什么当我做println时它会正确显示log cat
答案 1 :(得分:-2)
更新!所以我已经发现它在第一次安装时工作得很好并且登录但是出于某种原因,如果在初次登录后关闭应用程序时打开它会在updateUI部分崩溃。如果用户已登录无法更新,我会徘徊。我可能会尝试共享首选项并保存用户名和电子邮件,只需在注销时擦除即可。
修改强> 这是一个很久以前的问题,但它是什么,我讨厌正确的变量,然后需要从onCreate和onStart调用。在提出这个问题的时候,我正在努力工作只是编码的想法,更不用说Android生命周期的概念了。您在导航标题中初始化视图的方式也存在已知问题。初始化导航抽屉视图后,您可以初始化导航抽屉标题,然后可以初始化其中的文本视图。