我有一个方法,如果数据库中存在子级,则返回true,否则返回false。看起来像这样:
boolean subscriber;
public boolean checkChatRoomMembership(String chatRoomUid) {
mChatRoomMembers.child(chatRoomUid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(mAuth.getUid())) {
subscriber = true;
} else {
subscriber = false;
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return subscriber;
}
即使该节点存在于数据库中,它在第一次运行该方法时仍返回false。在以下情况下,它会按原样返回true。总是第一次启动活动时,它会返回false。有什么想法吗?
答案 0 :(得分:2)
首次调用该函数时,尚未调用该函数内部的回调。但是仍未检索到数据,并且您的函数返回“ subscriber”变量的默认值。首次调用此函数后,调用回调时“ subscriber”值将更新。
public void checkChatRoomMembership(String chatRoomUid) {
mChatRoomMembers.child(chatRoomUid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(mAuth.getUid())) {
// true, do you work here
} else {
// false, do you work here
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
希望这会对您有所帮助。