【问题标题】:error retrieving data from firebase with KOTLIN使用 KOTLIN 从 firebase 检索数据时出错
【发布时间】:2020-10-26 11:29:16
【问题描述】:

我正在尝试从 firebase 检索数据,但我得到:

java.lang.ClassCastException:java.util.HashMap 无法转换为 com.android.mlc.model.Usuario

我不知道为什么演员会失败:

private fun listarDatos() {

    databaseReference.child("Usuario").addValueEventListener(object : ValueEventListener{
        override fun onCancelled(p0: DatabaseError) {
            Toast.makeText(baseContext, "Failed to load post.",
                Toast.LENGTH_SHORT).show()
        }

        override fun onDataChange(dataSnapshot: DataSnapshot) {

            Log.w("Usuarios1", "mehe")
            for (UsuariosFirebase in dataSnapshot.children) {
                  listaUsuarios.add(UsuariosFirebase.value as Usuario) <--- ERROR
      

                arrayAdapterUusuario = ArrayAdapter<Usuario>(this@MainActivity,android.R.layout.simple_list_item_1, listaUsuarios)
                listaV_Usuarios.adapter = arrayAdapterUusuario
            }


        }
    })
}

为什么我不能将值 UsuarioFireBase.value 转换为 Usuario

【问题讨论】:

标签: android firebase kotlin firebase-realtime-database


【解决方案1】:

据我所知,您的UsuariosFirebase.value 返回一个Map&lt;String, Object&gt;,确实不能如错误所示转换为Usuario

要从 DataSnapshot 获取数据作为 Usuario 对象,您必须告诉 Firebase 为您进行转换:

listaUsuarios.add(UsuariosFirebase.getValue<Usuario>())

另请参阅getting values from Firebase 上的文档。


以上要求您安装了Kotlin extensions (KTX) for Firebase Realtime Database。如果你很难做到这一点,你也可以使用这个变体,它是对 Java 代码的直接重写:

listaUsuarios.add(UsuariosFirebase.getValue(Usuario::class.java))

【讨论】:

  • 有趣的 getValue 没有类型参数:任何? ...我要哭了
  • 你能试试listaUsuarios.add(UsuariosFirebase.getValue(Usuario::class.java))吗?这是我在其他地方看到的,但我的回答是基于文档的建议。
  • 是的,兄弟,UsuariosFirebase.getValue(Usuario::class.java) 工作正常 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2021-02-08
  • 2020-09-18
  • 1970-01-01
  • 2020-08-25
相关资源
最近更新 更多