"NullPointerException: null cannot be cast to non null type Error" 在科特林中
"NullPointerException: null cannot be cast to non null type Error" in kotlin
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 中读取数组文档。
首先,.addOnSuccessListener
returns 结果,而不是值所以它显然会导致异常。
var documents: ArrayList<String> = arrayListOf()
c.collection("applicationForm").document(documentid.toString()).get()
.addOnSuccessListener { result ->
documents = result.value
}
同时检查 result.values 是否为 != null,
像这样获取值,最后还要检查您是否正确映射了集合。
您门控正确 document?.get(...)
但您将结果转换为 ArrayList。
由于 document
为 null 或文档结果中没有 "notifyTo"
键,因此您最终基本上会执行 null as ArrayList<String>
。因此错误。
要停止崩溃,您需要执行 document.get("notifyTo") as? ArrayList<String>
但您真正想要确定的是“notifyTo”存在于您的文档中,这样您就不会再得到空 return 值
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 中读取数组文档。
首先,.addOnSuccessListener
returns 结果,而不是值所以它显然会导致异常。
var documents: ArrayList<String> = arrayListOf()
c.collection("applicationForm").document(documentid.toString()).get()
.addOnSuccessListener { result ->
documents = result.value
}
同时检查 result.values 是否为 != null, 像这样获取值,最后还要检查您是否正确映射了集合。
您门控正确 document?.get(...)
但您将结果转换为 ArrayList。
由于 document
为 null 或文档结果中没有 "notifyTo"
键,因此您最终基本上会执行 null as ArrayList<String>
。因此错误。
要停止崩溃,您需要执行 document.get("notifyTo") as? ArrayList<String>
但您真正想要确定的是“notifyTo”存在于您的文档中,这样您就不会再得到空 return 值