【问题标题】:Boolean returns false first time in activity [duplicate]布尔值在活动中第一次返回 false [重复]
【发布时间】:2019-12-06 04:55:40
【问题描述】:

我有一个方法,如果数据库中存在孩子,则返回 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。 Activity 第一次启动时总是返回 false。任何想法为什么?

【问题讨论】:

标签: java android firebase firebase-realtime-database


【解决方案1】:

第一次调用函数时,函数内部的回调还没有被调用。然而,没有检索数据,您的函数返回“订阅者”变量的默认值。在第一次调用此函数后,“订阅者”值会在回调被调用时更新。

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

    }
});

}

希望这会对你有所帮助。

【讨论】:

  • 好的,谢谢。你知道我该如何解决这个问题吗?
  • 我的建议是不要将此作为函数,否则在此函数返回的基础上执行其他逻辑时,请使用此代码。如果你是根据这个函数结果做某事而不是把所有这些逻辑写在这个函数回调中。
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多