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