这是我的数据库布局。我当前正在使用以下命令从中获取数据:myRef.child(userid).child("UserName").get().addOnSuccessListener {
这对于获取所需的值非常有效,在本例中,用户名为“Josh”。然后,我可以使用以下命令将他的个人资料的文本视图设置为显示他的姓名:
val name = findViewById<TextView>(R.id.Nameuser)
myRef.child(userid).child("UserName").get().addOnSuccessListener {
Log.i("firebase", "Got value ${it.value}")
name.setText("Name: ${it.value}")
}.addOnFailureListener{
Log.e("firebase", "Error getting data", it)
}
我需要得到的不喜欢的值是真的,使他的个人资料显示他的不喜欢的列表。我最初的尝试是通过使用相同的方法,但名称的路径从“用户名”改为“不喜欢”,这返回了所有的值真和假的不喜欢部分的列表。我只需要/想要的真值,所以我添加了.equalTo(true)
,所以它看起来像:
val dislikes = findViewById<TextView>(R.id.Dislikes)
myRef.child(userid).child("Dislikes").equalTo(true).get().addOnSuccessListener {
Log.i("firebase", "Got value dis ${it.value}")
dislikes.setText("Dislikes: ${it.value}")
}.addOnFailureListener{
Log.e("firebase", "Error getting data", it)
}
但这与以下内容冲突。java.lang.IllegalArgumentException: When using orderByPriority(), values provided to startAt(), startAfter(), endAt(), endBefore(), or equalTo() must be valid priorities.
我该如何修正这个错误?或者有没有其他方法可以从数据库中只获取真值并进行排序,然后将它们放到数组中使用?
1条答案
按热度按时间zpf6vheq1#
Firebase实时数据库查询包括两个操作:
1.对
orderBy...
的调用,它告诉数据库按特定值对子节点进行排序。1.对
equalTo
、startAt
、endAt
等的调用,它告诉数据库随后根据先前排序的值过滤子节点。您的代码包含#2,但它不包含任何排序数据的指令。虽然这在语法上是有效的(否则SDK会引发错误),但它没有做您需要的事情。
在您的示例中,您希望对
Dislikes
下的子节点的值进行排序/过滤,因此如下所示: