kotlin 中的“NullPointerException:null 无法转换为非 null 类型错误”

"NullPointerException: null cannot be cast to non null type Error" in kotlin

提问人:user16493824 提问时间:7/23/2021 最后编辑:Zainuser16493824 更新时间:7/23/2021 访问量:5223

问:


 var notify = ArrayList<String>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main_user)
        btn_list2.setOnClickListener {

            val sharedPreferences1 = getSharedPreferences("id", Context.MODE_PRIVATE)
            val documentid: String? = sharedPreferences1.getString("id","null")
            val c = FirebaseFirestore.getInstance()
            val d = c.collection("applicationForm").document(documentid.toString()).get()
                .addOnSuccessListener { document ->

                    notify = document?.get("notifyTo") as ArrayList<String>

                    var str1 = notify.joinToString()
                    Toast.makeText(applicationContext,str1,Toast.LENGTH_SHORT).show()

}}}

在这里,我在行中出现错误。notify = document?.get("notifyTo") as ArrayList<String>

这是我的logcat详细信息

java.lang.NullPointerException: null cannot be cast to non-null type java.util.ArrayList<kotlin.String>
        at com.example.bloodbankcompany.MainActivityUser.onCreate$lambda-4$lambda-3(MainActivityUser.kt:47)
        at com.example.bloodbankcompany.MainActivityUser.lambda$cGlrfLFSOO25IeEAacXMuz6Tzx0(Unknown Source:0)`. 

请谁能帮忙。在这里,我正在尝试从firestore读取数组文档。

Android 数组 kotlin google-cloud-firestore nullpointerexception

评论

0赞 AlexT 7/23/2021
your 为 null 或不包含字段。documentnotifyTo

答:

0赞 Ali 7/23/2021 #1

首先,返回结果,而不是值,因此显然会导致异常。.addOnSuccessListener

    var documents: ArrayList<String> = arrayListOf()

    c.collection("applicationForm").document(documentid.toString()).get()
                .addOnSuccessListener { result ->
                documents = result.value
    }

还要检查 result.values 是否为 != null, 像这样获取值,最后还要检查是否正确映射集合。

0赞 Rafa 7/23/2021 #2

您正在正确地进行门控,但您正在将结果强制转换为 ArrayList。document?.get(...)

由于要么是 null 要么是文档结果中没有键,因此您最终基本上会执行 .因此出现错误。document"notifyTo"null as ArrayList<String>

要停止崩溃,您需要做document.get("notifyTo") as? ArrayList<String>

但真正希望你确保的是“notifyTo”存在于你的文档中,这样你就不再得到一个空的返回值