等待所有异步方法完成



我编写了一个包含两个异步方法的方法,用于创建与firebase的连接。我想在所有异步方法完成后完成方法。我该怎么做呢?如果它是一个异步方法,那么它将创建callBack接口,但在这种情况下没有帮助。

例如:

public void method(String teamID1,String teamID2)
{
final ArrayList<String> usersID = new ArrayList<>();
final DatabaseReference mDatabase1 =  getDatabaseReference(ConstantNames.ROLE_PATH).child ( teamID1 );
mDatabase1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
usersID.add(snapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
final DatabaseReference mDatabase2 =  getDatabaseReference(ConstantNames.ROLE_PATH).child ( 2 );
mDatabase2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
usersID.add(snapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}

(这个方法只是为了说明)

我想在mDatabase1的监听器和mDatabase2的监听器调用时完成这个方法。我该怎么做呢?

我建议使用全新的get()方法。该方法的作用与addListenerForSingleValueEvent几乎相同,但是:

  • 它修复了一个可能从磁盘缓存返回过时数据的竞争条件。
  • 返回Task<DataSnapshot>

最后一位与您相关,因为它允许您在这里的两个数据库调用的任务上使用Tasks.whenAll()

也看到:

  • get()和addListenerForSingleValueEvent之间的区别是什么?,例如新的get()API与addListenerForSingleValueEventAPI的对比
  • Tasks.whenAll的参考文档。
  • 成为Firebase任务管理员!(第4部分:多任务处理),以获取使用Tasks.whenAll()的示例。

相关内容

  • 没有找到相关文章