android - Kotlin 。未经检查将 : Any? 转换为 HashMap<String?, String?>?

标签 android kotlin

我想得到 HashMap<String?, String?>?来自 firebaseDatabase :

override fun onDataChange(dataSnapshot: DataSnapshot) {
    val users: HashMap<String?, String?>? = dataSnapshot.value as HashMap<String?, String?>?  // todo !!!
    if (users != null) {
        if (!users.containsKey(userUid)) {
            users[userUid] = userName
        }
    }
}

此代码有效但 Android Studio在第二行显示警告:

 Unchecked cast: Any? to HashMap<String?, String?>?

如何以正确的方式解决这个问题?

最佳答案

GenericTypeIndicator 的方法有效,谢谢@leoderprofi

    val ti = object : GenericTypeIndicator<HashMap<String?, String?>?>() {}
    //...
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        val users: HashMap<String?, String?>? = dataSnapshot.getValue(ti)
        if (users != null) {
            if (!users.containsKey(userUid)) {
                users[userUid] = userName
            }
        }
    }

关于android - Kotlin 。未经检查将 : Any? 转换为 HashMap<String?, String?>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49209150/

相关文章:

Android SQLite - openOrCreateDatabase() nullPointerException

JavaScript/Jsoup - 从 "i class"获取背景图像 url

kotlin - 在 Kotlin 中锁定互斥锁的正确方法

android - 如何使用导航组件管理权限请求代码?

types - Kotlin 可以在类文件中发出 JSR-305 注释吗

Android ListView Item - 从右到左动画菜单

android - 在按住Android按钮的情况下连续删除EditText的内容

android - 将应用程序移至 SD 卡

kotlin - 为什么 kotlin 协程中的 launch 会吞下异常?

kotlin - 在 Kotlin 中,如何创建一个 lambda 列表,其中每个 lambda 的类型都是 (Int) -> List?我收到解构声明错误