布尔值在活动中第一次返回 false [重复]
Posted
技术标签:
【中文标题】布尔值在活动中第一次返回 false [重复]【英文标题】:Boolean returns false first time in activity [duplicate] 【发布时间】: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。任何想法为什么?
【问题讨论】:
您可能在操作完成之前返回它,因为它是异步的 您不能返回尚未完成加载的现在。因此,您要么需要将需要数据的代码移动到onDataChange
,要么实现自定义回调。请参阅***.com/questions/33203379/…、***.com/questions/38456650/… 和 ***.com/questions/50434836/…
【参考方案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)
);
希望这会对你有所帮助。
【讨论】:
好的,谢谢。你知道我该如何解决这个问题吗? 我的建议是不要将此作为函数,否则在此函数返回的基础上执行其他逻辑时,请使用此代码。如果你是根据这个函数结果做某事而不是把所有这些逻辑写在这个函数回调中。以上是关于布尔值在活动中第一次返回 false [重复]的主要内容,如果未能解决你的问题,请参考以下文章
全局布尔值在 addListenerForSingleEventValue 函数内设置,但在以下 if 语句中无法识别 [重复]