Java 从适配器有条件删除
如果我的问题听起来很傻,请提前道歉。我是个新手。 在我的应用程序中,我有一个适配器,显示从Firebase Firestore查询的文档。Java 从适配器有条件删除,java,android,firebase,google-cloud-firestore,android-adapter,Java,Android,Firebase,Google Cloud Firestore,Android Adapter,如果我的问题听起来很傻,请提前道歉。我是个新手。 在我的应用程序中,我有一个适配器,显示从Firebase Firestore查询的文档。 目前有一个OnSwipe侦听器可以删除文档。 我想将其设置为只有特定用户记录的文档才能被删除。含义:用户只能删除自己编写的文档,不能删除他人编写的文档。 请告诉我怎么做 目前代码如下所示: new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | Item
目前有一个OnSwipe侦听器可以删除文档。 我想将其设置为只有特定用户记录的文档才能被删除。含义:用户只能删除自己编写的文档,不能删除他人编写的文档。 请告诉我怎么做 目前代码如下所示:
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
adapter.deleteItem(viewHolder.getAdapterPosition());
}
}).attachToRecyclerView(recyclerView);
您需要实现安全规则,以将删除操作限制为文档作者。在本文档[1]中,它提到了如何设置写入规则,其中还包含创建、更新和删除规则[2]。因此,您可以设置如下规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow delete: if request.auth.uid == resource.data.userid;
}
}
}
如上所述,如果您能够提供deleteitem()的内容和文档结构,就更清楚了
[1]
[2] 谢谢大家的帮助。 我确实修改了我的delete方法,它成功了: 谢谢你的提示和帮助
public void deleteItem(int position, String userID) {
String docUserID = getSnapshots().getSnapshot(position).getString("userID");
Log.i("deleteItem", "docUserID: " + docUserID + " userID: " + userID);
if (docUserID != null) {
if (docUserID.equals(userID)) {
getSnapshots().getSnapshot(position).getReference().delete();
Log.i("deleteItem", " if worked... ");
} else {
Log.i("deleteItem", " if did not work");
}
}
}
请提供方法
deleteItem()
的内容以及“文档”的数据结构。请编辑您的问题并将您的数据库结构添加为屏幕截图。请用@AlexMamoThank回复你们。不知道如何在这里添加屏幕截图。deleteItem()如下所示:public void deleteItem(int position){getSnapshots().getSnapshot(position).getReference().delete();}感谢您的帮助。不确定如何在此处显示文档结构。每个文档都有一些字段,如果它们是userID,则有一个字段,userID也可以为null。public void deleteItem(int位置){getSnapshots().getSnapshot(位置).getReference().delete();}