【发布时间】:2020-11-28 23:19:38
【问题描述】:
我想在点击监听器上检查文档是否已经存在。
如果该文档已经存在,则应将其删除,不再添加。
我阅读了 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 firestore 做到这一点?
【问题讨论】:
-
我想知道你为什么将听众声明为另一个听众。我的意思是从更高层次的角度来看。我想说在点击监听器中你应该通过“触发”一个事件来“触发”你的监听器。
标签: java android firebase android-studio google-cloud-firestore