我一直在寻找对我的代码有广泛帮助的答案,但我找到的解决方案对我不起作用。
我收到以下错误:
kotlin.TypeCastException: null cannot be cast to non-null
type kotlin.collections.Map<kotlin.String, kotlin.Any>
FATAL EXCEPTION: main
Process: com.meetHitch.HitchApp, PID: 4021
kotlin.TypeCastException: null cannot be cast to non-null
type kotlin.collections.Map<kotlin.String, kotlin.Any>
at ... helpers.RestAPIKt$getUserProfile$1 ...
at com.google.android.gms.tasks.zzj.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main ...
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$Method...
at com.android.internal.os.ZygoteInit.main
我的代码如下:
private val TAG: String
get() = "RestAPI"
private val fUser: FirebaseUser?
get() = FirebaseAuth.getInstance().currentUser
private val uid: String?
get() = fUser?.uid
private val baseDoc: DocumentReference
get() = FirebaseFirestore.getInstance().
collection("users").document(uid!!)
private val leadsDoc: DocumentReference
get() {
appUser.currentConference?.id?.let {
return baseDoc.collection("leads").document(it)
}
return baseDoc.collection("leads").document(demoID)
}
private val conferencesCollection: CollectionReference
get() = FirebaseFirestore.getInstance().
collection("conferences")
fun getUserProfile(callback: (AppUser) -> Unit) {
// Source can be CACHE, SERVER, or DEFAULT.
val source = Source.DEFAULT
baseDoc.get(source)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val document = task.result
if (document != null) {
printnLog(TAG, "Loaded profile for User
with UID: $uid successfully!")
val user = AppUser(task.result.data as
Map<String, Any>)
callback(user)
} else {
println("No profile set. Saving initial
profile...")
appUser = AppUser(fUser!!)
setUserProfile()
}
} else {
Log.w(TAG, "getUser:onCancelled",
task.exception)
}
}
}
我已经提到了 kotlin.TypeCastException: null cannot be cast to non-null type com.midsizemango.databasekotlin.Note并且没有一个解决方案有效,尽管可能是我没有实现?在正确的地方。我试过“as?Map”,但出现类型不匹配错误。
最佳答案
用 val user = AppUser(task.result.data as Map<String, Any>)
行, 使 Any
变量可为空:
val user = AppUser(task.result.data as Map<String, Any?>)
关于android - kotlin.TypeCastException : null cannot be cast to non-null type kotlin. collections.Map<kotlin.String, kotlin.Any>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52260982/