Android 查询数据后,Firebase回收器适配器中的排序结果

Android 查询数据后,Firebase回收器适配器中的排序结果,android,firebase-realtime-database,firebaseui,Android,Firebase Realtime Database,Firebaseui,我在实时数据库(RTDB)上使用Firebase回收器适配器。不幸的是,RTDB的查询功能非常有限,给我带来了一些问题。以下是我试图解决的问题: 假设我有一个对象模型,由一个人的姓名和国籍组成。我可以查询所有具有特定国籍的人,如下所示: Query query = FirebaseDatabase.getInstance().getReference().child("People").orderByChild("nationalOrigin").equalTo("USA");

我在实时数据库(RTDB)上使用Firebase回收器适配器。不幸的是,RTDB的查询功能非常有限,给我带来了一些问题。以下是我试图解决的问题:

假设我有一个对象模型,由一个人的姓名和国籍组成。我可以查询所有具有特定国籍的人,如下所示:

        Query query = FirebaseDatabase.getInstance().getReference().child("People").orderByChild("nationalOrigin").equalTo("USA");
    FirebaseRecyclerOptions<People> options = new FirebaseRecyclerOptions.Builder<People>()
            .setQuery(query, People.class)
            .build();
Query Query=FirebaseDatabase.getInstance().getReference().child(“人”).orderByChild(“nationalOrigin”).equalTo(“美国”);
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(查询,People.class)
.build();
这就正确地质疑了所有具有“美国”国籍的人。但是,如果我还希望在填充回收视图之前根据人员的姓名按字母顺序对数据进行排序,该怎么办。最好的方法是什么


提前谢谢。

我以前也遇到过同样的问题,但从未找到解决办法。Firebase Firestore现在提供更强大的查询。你可以考虑切换到Firestore。谢谢。我已经考虑过搬到firebase,而且可能仍然会这样做。但在这个时候,我更喜欢留在RTDB。谢谢你的建议。实时数据库不能对多个字段进行排序或筛选。您需要创建一个复合字段,或者在客户端上对数据进行排序,并使用自定义适配器在recyclerview中显示。在您的情况下,您可以添加一个属性
“NationalOrigination\u name”:“USA\u LeaningAndroid”
,并使用类似以下内容对其进行排序/筛选:
ref.orderByChild(“NationalOriginal\u name”).startAt(“USA\uu”).endAt(“USA~)
。有了它,您可以按照名称的顺序从美国获得所有子节点。有关更长的示例,请参见我对的回答