我想使用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实时数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)