在使用检索到的数据执行某些操作之前,我想从多个Firebase节点中读取数据。目前,我已经通过将每个请求嵌套在先前请求的完成侦听器中来完成此操作,但嵌套使代码难以维护。有没有办法连续或同时执行多个请求,并在所有请求完成后进行监听?
答案 0 :(得分:3)
示例如果您有两个请求,并且想要在两个代码完成和/或成功后运行一些代码:
Boolean ref1done = false;
Boolean ref2done = false;
// if you need data from snapshot
DataSnapshot result1;
DataSnapshot result2;
ref1done = false;
dataRef1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ref1done = true;
result1 = dataSnapshot;
doThisAfter();
}
...
});
ref2done = false;
dataRef2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ref2done = true;
result2 = dataSnapshot;
doThisAfter();
}
...
});
...
public function doThisAfter() {
if (ref1done && ref2done) {
// do something
// if you need data from snapshot, it can be accessed from result1 and result2
}
}
这可能不是最好的解决方案,我还在搜索是否有更好的解决方案。或者您可以尝试使用EventBus。