如何从 Firebase android kotlin 获取所有具有特定价值的孩子?
Posted
技术标签:
【中文标题】如何从 Firebase android kotlin 获取所有具有特定价值的孩子?【英文标题】:how to get all child with specific value from 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")
的引用,它可以工作,但我想从所有用户那里获取。
【问题讨论】:
【参考方案1】:您需要浏览 onDataChange
中的 dataSnapshot
才能找到正确的子节点。
要浏览DataSnapshot
object,您有两种主要方法:
-
您已经知道要访问的子节点的密钥,在这种情况下,您可以使用
child()
method 访问该特定子节点。例如,您可以使用 dataSnapshot.child("Turcia/Adana/Çukurova University/Faculty of Business").children.map
读取 JSON 中标记的子项,类似于您已经在参考上尝试过的内容。
您不知道子节点的键,在这种情况下,您将遍历快照的getChildren()
property。有关后者的示例,请参阅 listening for value events on a list of children 上的 Firebase 文档。
我认为您在这里寻找第二种方法,但无论如何您正在处理DataSnapshot
s,有一些方法可以获取那里的数据。
【讨论】:
var list = ArrayList<HomePageModel>() 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)
的作用。以上是关于如何从 Firebase android kotlin 获取所有具有特定价值的孩子?的主要内容,如果未能解决你的问题,请参考以下文章
如何从android下载firebase数据库作为CSV文件
如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?