为什么我的else块没有在javaandroidstudio中的OnClickListener中执行

为什么我的else块没有在javaandroidstudio中的OnClickListener中执行,java,android,google-cloud-firestore,Java,Android,Google Cloud Firestore,我创建了一个功能,让我的应用程序用户可以选择最喜欢的商店。现在,如果用户已经喜欢某个商店并再次单击该按钮,则应该从firestore数据库中删除该记录 只有当查询匹配且任务成功时,我的代码才会工作,但不会执行代码的myelse部分。为什么呢 下面是当查询匹配且任务成功时,下面的代码可以正常工作,但当没有匹配时,它不会执行else部分。有人知道为什么吗 public void onClick(View view) { Task ref = fStore.collection(&qu

我创建了一个功能,让我的应用程序用户可以选择最喜欢的商店。现在,如果用户已经喜欢某个商店并再次单击该按钮,则应该从firestore数据库中删除该记录

只有当查询匹配且任务成功时,我的代码才会工作,但不会执行代码的my
else
部分。为什么呢

下面是当
查询
匹配且
任务成功
时,下面的代码可以正常工作,但当没有匹配时,它不会执行
else
部分。有人知道为什么吗

public void onClick(View view) {
        Task ref = fStore.collection("Favorites")
           .whereEqualTo("shopID", SID).whereEqualTo("usersID", UID)
                      .get()
          .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                       @Override
     public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
             for (QueryDocumentSnapshot document : task.getResult()) {
                              document.getReference().delete();
                                        }
                   } else {
      Map<String, Object> fav = new HashMap<>();
    
                         

         fav.put("shopID", SID);
         fav.put("usersID", UID);
         fav.put("ShopHeaderImg", sHI);
         fav.put("ShopProfileImg", sPI);
         fav.put("address", sA);
         fav.put("costEst", sCost);
         fav.put("country", sC);
         fav.put("latitude", sLat);
         fav.put("location", sL);
         fav.put("name", sN);
         fav.put("numTables", sNumTable);
         fav.put("ratings", sR);
         fav.put("summary", sSummary);
         fav.put("timing", sT);
    
    
                                      
      fStore.collection("Favorites").add(fav)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                       @Override
     public void onSuccess(DocumentReference documentReference) {
                                                Toast.makeText(DetailsActivity.this, "Saved", Toast.LENGTH_SHORT).show();
     }).addOnFailureListener(new OnFailureListener() {
    public void onFailure(@NonNull Exception e) {
   Toast.makeText(DetailsActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                                            }
                                        });
                                    }
                                }
                          

  });
public void onClick(视图){
Task ref=fStore.collection(“收藏夹”)
.whereEqualTo(“shopID”,SID)。whereEqualTo(“usersID”,UID)
.get()
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
对于(QueryDocumentSnapshot文档:task.getResult()){
document.getReference().delete();
}
}否则{
Map fav=新的HashMap();
fav.put(“shopID”,SID);
fav.put(“usersID”,UID);
fav.put(“店主”,sHI);
fav.put(“ShopProfileImg”,sPI);
fav.put(“地址”,sA);
fav.put(“成本测试”,sCost);
fav.put(“国家”,sC);
fav.put(“纬度”,板条);
fav.put(“位置”,sL);
fav.put(“名称”,序号);
fav.put(“numTables”,sNumTable);
固定资产净值(“评级”,sR);
fav.put(“摘要”,汇总);
fav.put(“定时”,sT);
fStore.collection(“收藏夹”).add(fav)
.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(文档引用文档引用){
Toast.makeText(DetailsActivity.this,“Saved”,Toast.LENGTH_SHORT.show();
}).addOnFailureListener(新的OnFailureListener(){
public void onFailure(@NonNull异常e){
Toast.makeText(DetailsActivity.this,“出错了”,Toast.LENGTH_SHORT.show();
}
});
}
}
});

我认为您误解了任务。isSuccessful()表示。如果在执行查询过程中没有错误,则该方法将返回true。不返回文档的查询不是错误。这种情况非常正常,被认为是成功的。只有在尝试执行Firestore无法实际运行的查询时,才会发生错误

如果要检查查询是否未返回任何文档,应查看任务结果中包含的文档。它有一个方法可以告诉您是否有文档

public void onComplete(@NonNull Task<QuerySnapshot> task) {
    if (task.isSuccessful()) {
        QuerySnapshot querySnapshot = task.getResult();
        if (querySnapshot.isEmpty()) {
            // put code here to deal with no documents in the result
        }
        else {
            // put code here to deal with documents present in the result
            for (QueryDocumentSnapshot document : querySnapshot) {
            }
        }
    }
}
public void onComplete(@NonNull任务){
if(task.issusccessful()){
QuerySnapshot QuerySnapshot=task.getResult();
if(querySnapshot.isEmpty()){
//将代码放在这里,以处理结果中没有文档的情况
}
否则{
//在此处放置代码以处理结果中存在的文档
用于(QueryDocumentSnapshot文档:querySnapshot){
}
}
}
}

哇,非常感谢您的澄清,我已经为此工作了两个小时,我不可能理解。谢谢!!!现在它工作得很好。