android - Kotlin View 绑定(bind) java.lang.IllegalStateException : view must not be null inside listener

标签 android firebase kotlin google-cloud-firestore kotlin-android-extensions

我正在使用 View Binding来自 Kotlin Android 扩展:

import kotlinx.android.synthetic.main.fragment_user_profile.*

我想在 fragment 中显示来自 Cloud Firestore 的值:

FirebaseFirestore.getInstance()
    .collection("users")
    .document("1")
    .get()
    .addOnSuccessListener { doc ->
        my_text_view.text = doc["name"] as String
    }

如果在接收到数据时仍显示该 fragment ,则它会起作用。但是,如果用户在接收到数据之前关闭 fragment (按回键),它就会崩溃:

java.lang.IllegalStateException: my_text_view must not be null

如何避免这种情况?


当然我可以使用 my_text_view?.text = ... 但是

  • 有一天我会忘记输入 ?

  • 没有解决 fragment 销毁后监听器还活着的问题

我想我想要类似 addOnSuccessListener(Activity, OnSuccessListener) 的东西但对于 Fragment 而不是 Activity

最佳答案

如果 fragment 仍被添加到其宿主 Activity 中,您可以检查回调

FirebaseFirestore.getInstance()
.collection("users")
.document("1")
.get()
.addOnSuccessListener { doc ->
    if (isAdded) {
        my_text_view.text = doc["name"] as String
    }
}

但是,更好的解决方案是将您的业务逻辑移至 View 模型。

关于android - Kotlin View 绑定(bind) java.lang.IllegalStateException : view must not be null inside listener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510119/

相关文章:

java - 如果 Placeholder 已经是一个接口(interface),如何将 List<Placeholder> 传递给包

android - 添加翻译数量多于应用程序的库会在 string.xml 中产生错误

javascript - 如何在firebase中使用交易的promise '.then'组件

android-studio - viewBinding 无法正常工作(Android studio 4)

android - 在带有 ndk 10c 的 Android Studio 中使用线程和互斥锁

android - 我在构建 Android AOSP 时不小心卸载了 jack 服务器

javascript - Firebase 存储 : How to store image url as an object property?

android - 更新 Firebase Android 上的数据

android - 如何在kotlin中将对象字符串转换为数据类

java - Kotlin:通过 Kotlin 中的 Data 类在 Java 类中设置私有(private) boolean 值。为什么我不能这样做?