【发布时间】:2021-12-29 00:12:39
【问题描述】:
我想从 Firebase 中删除我的文档。但首先我需要确定文档 ID。我试图获取文档 ID:
docId = queryDocumentSnapshots.getDocuments().get(pos).getId();
然后,我只想删除我的文档。但是firebase异步工作,所以代码在'if'语句中不起作用。当我们第一次单击按钮时,docId 变量为 null 或者它采用之前单击的 docId,直到异步代码部分完成。
@Override
public void onBindViewHolder(@NonNull AdvertisementHolder holder, int position) {
imgUrl = publishedAdvertisements.get(position).getImgUrl();
holder.petName.setText(publishedAdvertisements.get(position).getPetName());
holder.petCategory.setText(publishedAdvertisements.get(position).getPetCategory());
Picasso.get().load(publishedAdvertisements.get(position).getImgUrl()).into(holder.petImage);
holder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
firebaseFirestore = FirebaseFirestore.getInstance();
firebaseFirestore.collection("Pets").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(@NonNull QuerySnapshot queryDocumentSnapshots) {
if (!queryDocumentSnapshots.isEmpty()) {
System.out.println("bos döndü");
docId = queryDocumentSnapshots.getDocuments().get(pos).getId();
}
}
});
System.out.println(docId);
if (docId != null) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("Pets").document(docId)
.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully deleted!");
publishedAdvertisements.clear();
getPublishedAnimals();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error deleting document", e);
}
});
}
notifyDataSetChanged();
}
});
【问题讨论】:
-
您尝试过 Sammy T 解决方案吗?有用吗?
-
另请注意,Firebase API 是异步的。所以你可能有兴趣阅读这篇文章,How to read data from Cloud Firestore using get()?。
标签: java android firebase android-recyclerview