【问题标题】:Wait for all async methods finish等待所有异步方法完成
【发布时间】:2021-02-26 00:21:28
【问题描述】:

我编写的方法包含两个创建与 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 的侦听器时完成此方法。 我该怎么做?

【问题讨论】:

    标签: java android firebase firebase-realtime-database java-threads


    【解决方案1】:

    我建议为此使用全新的get() 方法。这个方法和addListenerForSingleValueEvent做的差不多,但是:

    • 它修复了可能从磁盘缓存返回陈旧数据的竞争条件。
    • 它返回一个Task&lt;DataSnapshot&gt;。

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

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2019-10-19
      • 2014-08-09
      • 2013-02-15
      • 2016-07-07
      • 2016-03-16
      相关资源
      最近更新 更多