布尔值第一次在活动中返回假

时间:2019-07-28 18:32:40

标签: java android firebase firebase-realtime-database

我有一个方法,如果数据库中存在子级,则返回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。有什么想法吗?

1 个答案:

答案 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) {

    }
});

}

希望这会对您有所帮助。