等待所有异步方法完成

Wait for all async methods finish

我编写的方法包含两个与 firebase 建立连接的异步方法。我想在所有异步方法完成后完成该方法。我怎样才能做到这一点? 如果它是一种异步方法,那么我创建了回调接口,但在这种情况下没有帮助。

例如:

 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几乎一样,但是:

  • 它修复了可能 return 磁盘缓存中陈旧数据的竞争条件。
  • 它return是一个Task<DataSnapshot>

最后一点与您相关,因为它允许您随后使用 Tasks.whenAll() 执行此处两个数据库调用的任务。

另见: