Java 等待所有异步方法完成
我编写的方法包含两个异步方法,用于创建与firebase的连接。我想在所有异步方法完成后完成该方法。我该怎么做? 若它是一个异步方法,那个么我创建了回调接口,但在这种情况下并没有帮助 例如:Java 等待所有异步方法完成,java,android,firebase,firebase-realtime-database,java-threads,Java,Android,Firebase,Firebase Realtime Database,Java Threads,我编写的方法包含两个异步方法,用于创建与firebase的连接。我想在所有异步方法完成后完成该方法。我该怎么做? 若它是一个异步方法,那个么我创建了回调接口,但在这种情况下并没有帮助 例如: public void method(String teamID1,String teamID2) { final ArrayList<String> usersID = new ArrayList<>(); final DatabaseReference mDa
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) {
}
});
}
public void方法(字符串teamID1,字符串teamID2)
{
final ArrayList usersID=new ArrayList();
final DatabaseReference mDatabase1=getDatabaseReference(ConstantNames.ROLE_PATH).child(teamID1);
mDatabase1.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
usersID.add(snapshot.getValue().toString());
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
final DatabaseReference mDatabase2=getDatabaseReference(ConstantNames.ROLE_PATH).child(2);
mDatabase2.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot snapshot snapshot){
usersID.add(snapshot.getValue().toString());
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
}
(此方法仅用于说明)
我希望在调用mDatabase1和mDatabase2的侦听器时完成此方法。
如何操作?我建议为此使用全新的
get()
方法。此方法的作用与添加ListenerForSingleValueEvent的作用几乎相同,但:
- 它修复了可能从磁盘缓存返回过时数据的争用条件
- 它返回一个
任务
Tasks.whenAll()
另见:
- ,例如新的
API与get()
API的比较addListenerForSingleValueEvent
- 有关的参考文档
- 有关使用
的示例Tasks.whenAll()