【发布时间】:2018-06-22 19:02:20
【问题描述】:
我偶然发现了一个奇怪的问题。我正在尝试完成一件简单的事情 - 将 QuerySnapshot 中的所有内容转换为某种类型的集合。
fun createReminder(reminder: Reminder) =
remindersCollectionRef.document("${reminder.taskId}").set(reminder)
fun tryRemoveReminder(taskId: Int) =
remindersCollectionRef.document("$taskId").delete()
fun getReminders(onComplete: (List<Reminder>) -> Unit) {
remindersCollectionRef.get()
.addOnSuccessListener { querySnapshot ->
if (!querySnapshot.isEmpty)
onComplete(querySnapshot.toObjects(Reminder::class.java))
}
}
问题出在 getReminders 函数中。我知道收藏中有一个提醒。它也是 Reminder 类型的 100%,如您所见,我已经检查 querySnapshot 是否不为空。不过,当我调用 toObjects 时,我得到了一个空指针异常。
堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[])' on a null object reference
at com.google.android.gms.internal.zzevb$zza.zza(Unknown Source:57)
at com.google.android.gms.internal.zzevb.zza(Unknown Source:1025)
at com.google.android.gms.internal.zzevb.zza(Unknown Source:2)
at com.google.firebase.firestore.DocumentSnapshot.toObject(Unknown Source:10)
at com.google.firebase.firestore.QuerySnapshot.toObjects(Unknown Source:27)
at com.mypackage.util.FirestoreUtil$Companion$getReminders$1.onSuccess(FirestoreUtil.kt:131)
at com.mypackage.util.FirestoreUtil$Companion$getReminders$1.onSuccess(FirestoreUtil.kt:18)
at com.google.android.gms.tasks.zzj.run(Unknown Source:27)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
提醒类:
data class Reminder(val taskDocRef: DocumentReference, val taskId: Int)
这个问题对我来说似乎很奇怪。我会感谢你的帮助:)
【问题讨论】:
-
你能发布你得到的堆栈跟踪吗?您可以测试空然后立即获得 NPE,这似乎很奇怪。也许
toObjects函数里面有什么东西? -
@Todd 我刚刚添加了堆栈跟踪。
-
抱歉,还有一件事。我们可以获取提醒的代码吗?
-
@Todd 当然。很抱歉没有尽快添加。
-
尝试将其创建为具有默认(零参数)构造函数的类。
标签: firebase kotlin google-cloud-firestore