如何在Android中使用startAt(double value,String key)和endAt(double value,String key)Firebase实时数据库

如何在Android中使用startAt(double value,String key)和endAt(double value,String key)Firebase实时数据库,第1张

概述我想使用orderByChild进行查询,并使用这些子项的键进行过滤.在这种情况下,我的键和值都是可以查询我想要的数据.当键包含数字时会出现我的问题,如果键只包含字母,那么就没有问题.自从我直接从Firebaser读取anotheranswer中的建议以来,我一直在尝试始终沿数字保持字母.我的json是

我想使用orderByChild进行查询,并使用这些子项的键进行过滤.在这种情况下,我的键和值都是可以查询我想要的数据.

当键包含数字时会出现我的问题,如果键只包含字母,那么就没有问题.自从我直接从Firebaser读取another answer中的建议以来,我一直在尝试始终沿数字保持字母.

我的Json是:

{  "my_List":{    "100xyz":{      "value1": 100,      "value2": 100,      "name":"100xyz"    },    "200xyz":{      "value1": 200,      "value2": 200,      "name":"200xyz"    },    "300xyz":{      "value1": 300,      "value2": 300,      "name":"300xyz"    },    "400xyz":{      "value1": 400,      "value2": 400,      "name":"400xyz"    },    "500xyz":{      "value1": 500,      "value2": 500,      "name":"500xyz"    }  }}

我的代码是:

DatabaseReference root = FirebaseDatabase.getInstance().getReference().getRoot();DatabaseReference List = root.child("my_List");List.orderByChild("value2").startAt(100, "100xyz").endAt(500, "200xyz").addChildEventListener(new ChildEventListener() {    @OverrIDe    public voID onChildAdded(DataSnapshot dataSnapshot, String s) {        SomeModel someModel = dataSnapshot.getValue(SomeModel.class);        Log.d("SOME_MODEL", someModel.getname());    }});

问题是我可以在控制台中看到4个孩子:

D/SOME_MODEL: 100xyzD/SOME_MODEL: 200xyzD/SOME_MODEL: 300xyzD/SOME_MODEL: 400xyz

但我只能被看见2

D/SOME_MODEL: 100xyzD/SOME_MODEL: 200xyz

我要强调:只要按键没有数字,它就可以工作.

键有数字时,如何同时按orderByChild和键过滤?

解决方法:

您似乎认为,将两个参数传递给endAt()会使查询以值或键中最先出现的那个结束.那不是Firebase中查询工作的方式.

endAt()的第二个参数仅在查询找到与第一个参数匹配的节点之后使用.

因此,当您传递endAt(500,“ 200xyz”)时,数据库首先在value2等于value2(第一个参数)的节点上进行过滤.这意味着它将找到该节点作为查询的结尾:

"500xyz":{  "value1": 500,  "value2": 500,  "name":"500xyz"}

然后,它使用键200xyz(第二个参数)来确定是否包括此节点(技术上:要返回的多个节点在列表中的何处).由于键200xyz在500xyz之前,因此查询结果不包含此节点,导致:

"100xyz":{  "value1": 100,  "value2": 100,  "name":"100xyz"},"200xyz":{  "value1": 200,  "value2": 200,  "name":"200xyz"},"300xyz":{  "value1": 300,  "value2": 300,  "name":"300xyz"},"400xyz":{  "value1": 400,  "value2": 400,  "name":"400xyz"},

另请参阅:

> Firebase orderByChild with startAt()’s second argument w/ pagination not odering:
> Limiting the firebase equalTo query with the optional key parameter
> Firebase Query order by and start at name
> How to paging query from Firebase using Android FirebaseUI

总结

以上是内存溢出为你收集整理的如何在Android中使用startAt(double value,String key)和endAt(double value,String key)Firebase实时数据库全部内容,希望文章能够帮你解决如何在Android中使用startAt(double value,String key)和endAt(double value,String key)Firebase实时数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存