Ali*_*sha 1 java android firebase firebase-realtime-database
我正在通过 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) {
//...
}
Run Code Online (Sandbox Code Playgroud)
我知道通过对我的数据库的各种输入,在 addListenerForSingleValueEvent 中 find 设置为 true 。布尔值被实例化为
boolean found;
Run Code Online (Sandbox Code Playgroud)
全局,在任何其他函数之前。我什至尝试实现两个函数,一个设置布尔值,另一个返回它,但我最终得到相同的结果,布尔值在 addListenerForSingleValueEvent 中为真,在 if 语句中为假。有任何想法吗?
发生这种情况是因为 Firebase 调用是异步的,因此您的程序可能在进入 onDataChange() 方法之前就已命中 if 块。要查看是否是这种情况,您可以在 onDataChange 中放置一个断点,在 if(found) 行中放置一个断点,然后查看哪个先执行。
如果您尝试做的只是在发现设置为 true 后执行某些代码,那么您应该将整个 if 块移动到 onDataChange 中。
希望这会有所帮助!
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |