在RecyclerviewAdapter中使用过滤的数据库引用

时间:2016-12-14 09:27:18

标签: android firebase firebase-realtime-database

我一直在将我的Android应用程序的数据库从领域切换到Firebase。 是否可以过滤数据库引用,然后在FirebaseRecyclerAdapter中使用它?

这里有一些例子:

DatabaseReference adapterRef = someReference.orderByChild("country").equalTo("Test").getRef();
        MyAdapter adapter = new MyAdapter(this, adapterRef);

在我的回收站视图中显示所有数据,这意味着过滤无效。另一方面,当我执行以下操作时:

someReference.orderByChild("country").equalTo("test").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Log.v(TAG, "Value"+snapshot);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
            }
        });

我可以清楚地看到过滤功能正常,只显示国家/地区等于“测试”的项目。

1 个答案:

答案 0 :(得分:0)

您正在构建查询,然后忽略您在此处构建的查询:

DatabaseReference adapterRef = someReference
    .orderByChild("country").equalTo("Test") // here you have a query
    .getRef(); // here you get back the same location as someReference

正确的咒语是将查询传递给适配器:

Query query = someReference.orderByChild("country").equalTo("Test");
MyAdapter adapter = new MyAdapter(this, query);

您可能需要更改MyAdapter构造函数,以允许Query而不是DatabaseReference来编译它。