繁体   English   中英

为什么 getValue(nameClass::class.java) 在 Kotlin 和 Firebase 在 Android 为我工作

[英]why don't getValue(nameClass ::class.java) work for me in Kotlin with Firebase in Android

val data = FirebaseDatabase.getInstance()
val refB = data.getReference("branches")
refB.addValueEventListener(object : ValueEventListener{
    override fun onDataChange(snapshot: DataSnapshot) {
        for(n in snapshot.children){
            val branch = n.getValue(Branch::class.java)
            listB.add(branch!!)
        }
    }
    override fun onCancelled(error: DatabaseError) {
    }
})

在此处输入图像描述

我的 class 支行

class Branch(var id: String?, var nStudents: String, var nTeachers: String, var name:String) {
}

我无法读取数据一句话意味着Object,但我可以单独读取数据每个值。

我发现您的自定义 class 存在一些问题:

  1. 正如 Frank 在评论中指出的那样,由于区分大小写, nStudentsnTeachers不会正确地输入 map。
  2. 您的 class 似乎没有空构造函数(或默认 arguments ),这是数据库正确反序列化数据所必需的,如Firebase 文档中所述。
  3. 数据类型似乎不匹配:您已将nstudentsnteachers声明为String ,但我在您的数据库中将其视为数字,因此您可能应该使用IntLong

尽管如此,您更新后的 class 应该如下所示:

class Branch(
    var id: String? = null,
    var nstudents: Int = 0,
    var nteachers: Int = 0,
    var name: String = ""
) {
    // ...
}

如果这个 class 的唯一目的是保存数据,你可以把它变成一个数据 class

data class Branch(
    var id: String? = null,
    var nstudents: Int = 0,
    var nteachers: Int = 0,
    var name: String = ""
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM