【发布时间】:2019-05-06 13:08:13
【问题描述】:
我正在 firebase 中的一些子项中循环查看某个键的值是否存在,并且在我的 addListenerForSingleValueEvent 函数中找到了该键并将全局布尔值设置为 true。但是,在函数之后,变量被设置为 false,因此程序不会进入第二个 if 语句。
referenceClasses.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
if (snapshot.getKey().compareTo(combinedString) == 0) {
found = true;
break;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { }
});
if(found) {
//...
}
我知道在 addListenerForSingleValueEvent 中通过对我的数据库的各种输入将 found 设置为 true。布尔值被实例化为
boolean found;
全局,在任何其他功能之前。我什至尝试实现两个函数,一个设置布尔值,另一个返回它,但我最终得到了相同的结果,布尔值在 addListenerForSingleValueEvent 中为真,在 if 语句中为假。有什么想法吗?
【问题讨论】:
-
AvidRP 的回答确实是原因:您的
if(found)现在在onDataChange运行之前运行,所以found尚未设置。您无法使代码正常工作(或者至少不会在 Android 对您的应用程序不满意的情况下)。但是还有其他方法,如我的回答所示:stackoverflow.com/questions/50434836/…
标签: java android firebase firebase-realtime-database