kotlin.TypeCastException:不能将null强制转换为非null类型。kotlin.collections.Map <kotlin.string,kotlin.any =“”>

时间:2018-09-10 15:21:45

标签: 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”,但出现类型不匹配错误。

1 个答案:

答案 0 :(得分:4)

在第val user = AppUser(task.result.data as Map<String, Any>)行,将Any变量设为可空:

val user = AppUser(task.result.data as Map<String, Any?>)