我的firebase数据库如下:
此查询
String currentUserID = FirebaseAuth
.getInstace()
.getCurrentUser()
.getUid();
DatabaseReference favorsRef = FirebaseDatabase
.getInstance()
.getReference()
.child("favors");
Query myChatsQuery = favorsRef
.orderByChild("uid")
.equalTo(currentUserID);
我需要创建其他查询以仅从myChatsQuery中获取元组,后者具有名为“ messages”的子级。如果元组中没有子“消息”,那么我不想在新查询中插入它。
那么,如何从其他查询创建查询?
请帮助我
谢谢。
答案 0 :(得分:1)
不幸的是,orderByChild()
不能一次在多个相同的字段上工作,因此您可能必须分两步完成这项工作。
首先,您可以运行orderByChild()
查询以寻找currentUserId
,然后将所有匹配项添加到ArrayList中,然后在orderByChild()
中为{ {1}}。
这看起来像这样,在代码中:
uids
上面的这段代码将与messages
匹配的reference.orderByChild("uid").equalTo(currentUserId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists())
array.add(dataSnapshot.getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
)};
添加到ArrayList uids
。
currentUserId
您还可以使用for循环遍历array
中的所有值。
答案 1 :(得分:0)
要解决此问题,请使用以下代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("favors").orderByChild("uid").equalTo(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
if(ds.child("messages").exists()) {
//Do what you need to do
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
query.addListenerForSingleValueEvent(valueEventListener);
如您所见,您可以通过仅查询数据库一次来解决此问题。