为什么我的else块没有在javaandroidstudio中的OnClickListener中执行
我创建了一个功能,让我的应用程序用户可以选择最喜欢的商店。现在,如果用户已经喜欢某个商店并再次单击该按钮,则应该从firestore数据库中删除该记录 只有当查询匹配且任务成功时,我的代码才会工作,但不会执行代码的my为什么我的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
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){
}
}
}
}
哇,非常感谢您的澄清,我已经为此工作了两个小时,我不可能理解。谢谢!!!现在它工作得很好。