【问题标题】:how to get all child with specific value from Firebase android kotlin?如何从 Firebase android kotlin 获取所有具有特定价值的孩子?
【发布时间】:2021-05-30 05:33:32
【问题描述】:

我想从我的数据库中的所有用户那里获取图像中的颜色项。我试试这个

private fun setListPersonOfferService(){
    val database = FirebaseDatabase.getInstance()
    val userIdReference = database.getReference("user personal data").child("Country")
    val userFilterListener = object : ValueEventListener {
        override fun onCancelled(databaseError: DatabaseError) {
            // handle error
        }
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            val listTest = dataSnapshot.children.map { it.getValue(HomePageModel::class.java)!! }

                itemAdapter = ItemAdapterHomePage(context ?: return,
                    listTest as ArrayList<HomePageModel>
                )
                itemAdapter?.onItemClick = {
                    Supplier.serviceList[it].state = !Supplier.serviceList[it].state

                    itemAdapter?.notifyDataSetChanged()
                    Toast.makeText(context, "go to speck", Toast.LENGTH_LONG).show()
                }

                recyclerView_homePage.apply {
                    layoutManager = LinearLayoutManager(context)
                    adapter = itemAdapter
                }
            }
        }
    userIdReference.addListenerForSingleValueEvent(userFilterListener)
}

class HomePageModel(var lastName: String?=null,
                     var town: String?=null,
                     var faculty: String?=null,
                     var languageOfStudy: String?=null )

如果我更改对特定目录.child("Turcia").child("Adana").child("Çukurova University").child("Faculty of Business") 的引用,它可以工作,但我想从所有用户那里获取。

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    您需要浏览 onDataChange 中的 dataSnapshot 才能找到正确的子节点。

    要浏览DataSnapshot object,您有两种主要方法:

    1. 您已经知道要访问的子节点的密钥,在这种情况下,您可以使用child() method 访问该特定子节点。例如,您可以使用 dataSnapshot.child("Turcia/Adana/Çukurova University/Faculty of Business").children.map 读取 JSON 中标记的子项,类似于您已经在参考上尝试过的内容。
    2. 您不知道子节点的键,在这种情况下,您将遍历快照的getChildren() property。有关后者的示例,请参阅 listening for value events on a list of children 上的 Firebase 文档。

    我认为您在这里寻找第二种方法,但无论如何您正在处理DataSnapshots,有一些方法可以获取那里的数据。

    【讨论】:

    • var list = ArrayList&lt;HomePageModel&gt;() for (data in dataSnapshot.children){ user = data.getValue(HomePageModel::class.java) list.add(user as HomePageModel) } 我也试过了,但还是不行,因为它只查看参考中的孩子
    • 这将使您通过 JSON 中的一个级别。您需要在读取表单的位置和 HomePageModel 类映射到 JSON 中的属性的位置之间为 JSON 中的每个级别选择方法。
    • 你能帮我举个例子吗?
    • 这只是做更多相同的事情。您当前的for (data in dataSnapshot.children){ 循环遍历Country 节点的子节点,因此data.key 将是Turcia。如果你在这个for (data2 in data.children){ 中嵌套一个额外的循环,那么你的data2.key 将是Adana。您需要为您不知道要读取的密钥的每个级别的 JSON 嵌套这样的循环(我的答案中的选项 2)。一旦你知道了键名,你就可以使用选项 1 - 这也是你的 data.getValue(HomePageModel::class.java) 的作用。
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2021-04-22
    • 2017-05-08
    • 2020-09-26
    相关资源
    最近更新 更多