【问题标题】:java.lang.String cannot be cast to java.util.HashMap Error in Kotlinjava.lang.String 无法转换为 java.util.HashMap Kotlin 中的错误
【发布时间】:2018-06-01 12:30:13
【问题描述】:
class MainActivity : AppCompatActivity() {
    var adapter : MyTrackers.ContactAdapter?=null
    var listOfContact = ArrayList<UserContact>()
    var databaseRef:DatabaseReference?=null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    var userData = UserData(this)
    userData.loadPhoneNumber()

    databaseRef = FirebaseDatabase.getInstance().reference

    //For debug only
    //dummyData()

    adapter = MyTrackers.ContactAdapter(this, listOfContact)
    lvContactList.adapter = adapter
    lvContactList.onItemClickListener = AdapterView.OnItemClickListener{
        parent, view, position, id ->
        val userInfo = listOfContact[position]
        UserData.myTrackers.remove(userInfo.phoneNumber)
    }

}

override fun onResume() {
    super.onResume()
    refereshUsers()
}

fun refereshUsers(){
    val userData = UserData(this)
    if(userData.loadPhoneNumber()=="empty"){ //FirstTIme activity Starts
        return
    }
    databaseRef!!.child("Users").child(userData.loadPhoneNumber())
            .child("Finders").addValueEventListener(object : ValueEventListener{


                override fun onDataChange(dataSnapshot: DataSnapshot) {
                    val td = dataSnapshot!!.value as HashMap<String,Any>
                    listOfContact.clear()

                    if(td==null){
                        listOfContact.add(UserContact("NO_USERS","Nothing"))
                        adapter!!.notifyDataSetChanged()
                        return
                    }

                    for (key in td.keys){
                        listOfContact.add(UserContact("NO_NAME",key))
                    }

                }

我总是在我的 onDataChange 方法中的 td 声明中将上述 java.lang.String 无法转换为 java.util.HashMap。每当我尝试基于以前的 stackoverflow 解决方案进行调试时,它仍然无法正常工作,有人可以告诉我我正在犯什么错误以及如何进行必要的更正。

这是我的数据库的结构

 "Users" : {
    "7151418" : {
      "Finders" : "2018/03/26 20:03:02",
      "request" : "2018/03/26 20:03:02"
    }
  }
}

【问题讨论】:

  • 请添加您的数据库结构。
  • 谢谢,我想我已经在这里了
  • 在哪里,我看不到。通过数据库结构,我的意思是您的数据库中已有的内容。
  • 你看过了吗@Alex

标签: android firebase firebase-realtime-database kotlin real-time


【解决方案1】:

如文档所述:

getValue() 将此快照中包含的数据作为本机返回 类型。返回的可能类型有:

Boolean
String
Long
Double
Map&lt;String, Object&gt;
List&lt;Object&gt;

所以,在你的情况下,dataSnapshot!!.value 返回一个String

【讨论】:

  • 谢谢,但先生,在这种情况下我该怎么办
  • 将包含什么值,取决于您的数据库架构。您将不得不更改它或评估字符串。请设置断点或添加 println(dataSnapshot!!.value) 以查看发生了什么。 :)
【解决方案2】:

要解决这个问题,请更改以下代码行:

val td = dataSnapshot!!.value as HashMap<String,Any>

val td = dataSnapshot!!.value as String

Finders 属性的值实际上是 String 而不是 HashMap。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2018-05-17
    • 2020-08-13
    • 2014-02-11
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多