Android Firebase查询线程和删除多个文档

Android Firebase查询线程和删除多个文档,android,firebase,google-cloud-firestore,Android,Firebase,Google Cloud Firestore,我这里有两个问题: 第一个: 我想在删除所有对象finish时调用doSomethingOnce(),但我只需要调用一次,所以//Position1不是调用它的地方,因为它在循环中,所以会被多次调用//Position2也不起作用,因为根据我的理解和对日志的测试,它在所有删除完成之前被调用。所有删除操作完成后如何调用函数 第二个: 以这种方式删除多个文档实际上不起作用.delete()在循环中最多执行3次,因此当我有15个文档时,我需要调用此for(String id:Ids)循环并删除5次。我

我这里有两个问题:

第一个:

我想在删除所有对象finish时调用
doSomethingOnce()
,但我只需要调用一次,所以
//Position1
不是调用它的地方,因为它在循环中,所以会被多次调用<代码>//Position2也不起作用,因为根据我的理解和对日志的测试,它在所有删除完成之前被调用。所有删除操作完成后如何调用函数

第二个:

以这种方式删除多个文档实际上不起作用
.delete()
在循环中最多执行3次,因此当我有15个文档时,我需要调用此
for(String id:Ids)
循环并删除5次。我如何删除这3个以上的文档

FirebaseFirestore.getInstance().collection("test")
    .whereEqualTo("userID", user.getUid())
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if(task.isSuccessful()){
                if(task.getResult().size() > 0) {
                    List<String> Ids = new ArrayList<>();
                    for(QueryDocumentSnapshot documentSnapshot : task.getResult()) {
                        Ids.add(documentSnapshot.getId());
                    }

                    for(String id : Ids) {
                        FirebaseFirestore.getInstance().collection("test").document(id).delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {

                                //Position1
                                Toast.makeText(SettingsActivity.this, "Deleted", Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    //Position2
                } else {
                    Toast.makeText(SettingsActivity.this, "Nothing found", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(SettingsActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
            }
        }
    });
FirebaseFirestore.getInstance()集合(“测试”)
.whereEqualTo(“userID”,user.getUid())
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
if(task.getResult().size()>0){
列表ID=新的ArrayList();
对于(QueryDocumentSnapshot documentSnapshot:task.getResult()){
add(documentSnapshot.getId());
}
用于(字符串id:Ids){
FirebaseFirestore.getInstance().collection(“test”).document(id).delete().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
//位置1
Toast.makeText(SettingsActivity.this,“Deleted”,Toast.LENGTH_SHORT.show();
}
});
}
//位置2
}否则{
Toast.makeText(SettingsActivity.this,“未找到”,Toast.LENGTH_SHORT.show();
}
}否则{
Toast.makeText(SettingsActivity.this,“出错”,Toast.LENGTH_SHORT.show();
}
}
});

当您调用
Document.delete()
时,您将返回一个任务。要在许多任务完成后执行某些工作,请使用
tasks.whalll(…)

Task Tasks.whenAll(任务…任务)
比如:

ArrayList<Task<Void>> tasks = new ArrayList<Task<Void>>();
for(String id : Ids) {
    tasks.add(FirebaseFirestore.getInstance().collection("test").document(id).delete());
}
Tasks.whenAll(tasks).addOnSuccessListener(new OnSuccessListener<Void>() {
    @Override
    public void onSuccess(Void aVoid) {
        Toast.makeText(SettingsActivity.this, "Deleted", Toast.LENGTH_SHORT).show();
    }
});
ArrayList tasks=new ArrayList();
用于(字符串id:Ids){
tasks.add(FirebaseFirestore.getInstance().collection(“test”).document(id.delete());
}
Tasks.whenAll(Tasks).addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时公开作废(作废避免){
Toast.makeText(SettingsActivity.this,“Deleted”,Toast.LENGTH_SHORT.show();
}
});
我建议读道格的

ArrayList<Task<Void>> tasks = new ArrayList<Task<Void>>();
for(String id : Ids) {
    tasks.add(FirebaseFirestore.getInstance().collection("test").document(id).delete());
}
Tasks.whenAll(tasks).addOnSuccessListener(new OnSuccessListener<Void>() {
    @Override
    public void onSuccess(Void aVoid) {
        Toast.makeText(SettingsActivity.this, "Deleted", Toast.LENGTH_SHORT).show();
    }
});