android - kotlin.TypeCastException : null cannot be cast to non-null type kotlin. collections.Map<kotlin.String, kotlin.Any>

标签 android kotlin

我一直在寻找对我的代码有广泛帮助的答案,但我找到的解决方案对我不起作用。

我收到以下错误:

    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/

相关文章:

android - 使用 androids 可视化器类获取可变频率范围

arrays - 如何在同一数组中复制数组x次?

android - 为什么必须在 Android 中明确指定 $kotlin_version?

Android:外部SD卡的绝对位置

java - Android opengl 在绘制调用后修改顶点数组

android - 从 onResume() 方法访问 Viewpager 中的 TextView.setText()

java - 点击 Android 通知后无法启动 Activity

android - 在 android 11 中使用 intent.resolveActivity 时调用此方法时,请考虑在 list 中添加查询声明

java - 使用 TCP + AsyncTask 保持连接打开并监听从服务器发送的数据

android - 如何在 Android Studio 中的模块中使用不同的 Kotlin 版本(WearOS 模块)