3

I have searched for an answer that would help my code extensively, but the solutions I have found did not work for me.

I get the following error:

    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

My code is the following:

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)
            }
          }
        }

I have referred to kotlin.TypeCastException: null cannot be cast to non-null type com.midsizemango.databasekotlin.Note and none of the solutions have worked, although it could be that I am not implementing ? in the right place. I tried "as? Map" but I get a type mismatch error.

1 Answer 1

4

With the line val user = AppUser(task.result.data as Map<String, Any>), make the Any variable nullable:

val user = AppUser(task.result.data as Map<String, Any?>)
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you, this worked! At first it did trigger some errors/conflicts with how I had setup other imported code, but I traced back through and was able to fix that code too and eliminate all the errors.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.