我的 firebase database
中有下表规则
"tests": {
"$user_id": {
".read": "$user_id===auth.uid",
".write": "$user_id===auth.uid",
"$testId": {
"duration": {
".validate": "newData.val().length>1"
},
"date": {
".validate": "newData.val().length>1"
},
"status": {
".validate": "newData.val()==='Pending' || newData.val()==='Completed'"
}
}
}
},
基本上tests
表将有 2 个状态,pending
和 completed
并且用户在应用程序中将有 2 个按钮用于表示 test
的相应状态.
我有以下 FirebaseRecyclerAdapter
列出数据。
final DatabaseReference testsRef = FirebaseDatabase.getInstance().getReference(Constants.TEST_TABLE).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter <Tests, TestListHolder > (
Tests.class,
R.layout.test_list_card,
TestListHolder.class,
testsRef
) {
@Override
protected void populateViewHolder(final TestListHolder viewHolder, final Tests model, final int position) {
testsRef.child(adapter.getRef(position).getKey()).orderByChild("status")
.equalTo(viewType).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//fill the view data
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
};
所以每当按下 Pending
或 Completed
按钮,我会路过viewType
值为 Pending
/Completed
分别。但是上面的orderByChild
不起作用,每次都会在两个 View 中获取所有数据,我相信没有获取正确的数据库引用。有人可以帮助我实现这一目标吗?
如果有人坚持,这里是示例数据:
"jxW41BgS12edasWtUkZA2G0eLhf2" : { //logged in user id
"-KfFFioKvMDlAyqw43Yb" : { //testid
"duration" : 4,
"date" : 1489552731888,
"status" : "Completed"
},
"-KfFGqIdenjwNdfs232EQ" : {//testid
"duration" : 5,
"date" : 1489552731888,
"status" : "Pending",
}
}
最佳答案
只显示挂起的测试:
DatabaseReference testsRef = FirebaseDatabase.getInstance().getReference(Constants.TEST_TABLE).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
Query pendingTestsQuery = testsRef.orderByChild("status").equalTo(viewType);
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter <Tests, TestListHolder > (
Tests.class,
R.layout.test_list_card,
TestListHolder.class,
pendingTestsQuery
) {
@Override
protected void populateViewHolder(final TestListHolder viewHolder, final Tests model, final int position) {
// TODO: display model in the viewHolder
}
};
关于android - Firebase 条件列表数据检索 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42873245/