[英]How to delete documents from firebase firestore using where clause inside OnClickListener
我想在点击监听器上检查文档是否已经存在。
如果此文档已经存在,则应将其删除且不再添加。
我阅读了 firebase firestore 文档,但他们没有提供有关这些问题的太多细节。
所以这是我尝试过的:
这是我的 onclick 监听器,如果不存在,它将向数据库添加一个文档:
details_fave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
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() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(DetailsActivity.this,"Something went wrong", Toast.LENGTH_SHORT).show();
}
});
}
});
我首先要做的是检查文档是否存在,如果存在则删除它,如果不存在则插入。
如果在 where 子句中找到记录,这就是我要删除的记录:
Task<QuerySnapshot> ref = fStore.collection("Favorites")
.whereEqualTo("usersID", UID).whereEqualTo("shopID",SID)
.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 {
Log.d("whatever", "Error getting documents: ", task.getException());
}
}
});
但我仍然如何在 onclick 监听器中实现它?
我怎么能用 firebase 火库做到这一点?
首先,您应该将您的应用程序与访问数据的所有逻辑分开。
尝试为此使用 ViewModel。
无论如何,我会做这样的事情:
public void onClick(View view) {
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);
Task<QuerySnapshot> ref = fStore.collection("Favorites")
.whereEqualTo("usersID", UID).whereEqualTo("shopID",SID)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
//if there is no document to delete the loop will exit without iterating even once
for (QueryDocumentSnapshot document : task.getResult())
document.getReference().delete();
//here we stand when we cleared the history of the user favorite list in the specific store, we can enter the new list
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() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(DetailsActivity.this,"Something went wrong", Toast.LENGTH_SHORT).show();
}
});
} else {
Log.d("whatever", "Error getting documents: ", task.getException());
}
}
});
}
这有点乱,但它会完成工作。
如果您对预制件有类似的操作,但不包括查询文档,请使用TRANSACTIONS
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.