我的防火墙数据库如下所示:

从这个查询中
String currentUserID = FirebaseAuth
.getInstace()
.getCurrentUser()
.getUid();
DatabaseReference favorsRef = FirebaseDatabase
.getInstance()
.getReference()
.child("favors");
Query myChatsQuery = favorsRef
.orderByChild("uid")
.equalTo(currentUserID);我需要创建其他查询,以便从myChatsQuery获得元组,后者的子元素名为"messages“。如果元组没有子“消息”,我不想在我的新查询中插入它。
那么,如何从其他查询中创建查询呢?
帮帮我,
提前谢谢。
发布于 2018-10-31 04:04:40
不幸的是,orderByChild()不能同时在多个相同的字段上工作,因此您可能需要分两步完成这项工作。
首先,您可以运行orderByChild()查询,查找currentUserId,然后将所有匹配的查询添加到ArrayList中,然后在已找到的uids for messages中运行orderByChild()。
如下所示,在代码中:
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) {
}
)};上面的代码将uids匹配currentUserId添加到ArrayList array中。
databaseReference.child(array.get(0)).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.child("messages").exists())
// do your thing
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
)}; 您还可以使用for循环来遍历array中的所有值。
发布于 2018-10-31 13:14:52
要解决这个问题,请使用以下代码:
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);正如您所看到的,您可以通过只查询一次数据库来解决这个问题。
https://stackoverflow.com/questions/53074665
复制相似问题