android - 只有最后添加的项目会在 Android 的 Firebase 实时数据库中删除
问题描述
请耐心等待,因为我是 Firebase 的新手。我创建了一个应用程序来让用户添加项目和类别。我所做的是,当我添加一个类别时,我将CategoryId
or 键保存在共享首选项中,当我想检索它时,我将它与类别中的键进行比较。
这里发生的情况是,只有我添加的最后一个项目会被删除,之后不会删除其他项目。
有人可以告诉我下面的代码有什么问题吗?谢谢你的帮助。
这是我的结构
这是我的代码:
public void deleteCategory(){
SharedPreferences shared = getSharedPreferences("OwnerPref", MODE_PRIVATE);
final String username = (shared.getString("owner_username", ""));
SharedPreferences categoryshared = getSharedPreferences("CategoryPref", MODE_PRIVATE);
final String catId = (categoryshared.getString("category_id",""));
ownerdbreference.orderByChild("business/owner_username").equalTo(username).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
final String ownerkey = dataSnapshot1.getKey();
ownerdbreference.child(ownerkey+"/business/category").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot dataSnapshot2:dataSnapshot.getChildren()){
String categorykey = dataSnapshot2.getKey();
if (categorykey.equals(catId)){
dbreference.child("owner/"+ownerkey+"/business/category").child(catId+"/category_name").setValue(null);
Toast.makeText(EditCategory.this, "Item deleted!", Toast.LENGTH_SHORT).show();
finish();
}else{
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
} else {
Toast.makeText(EditCategory.this, "Does not exist", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
解决方案
取决于您的代码,您仅删除其密钥等于共享首选项中上次保存的密钥的项目。
从共享首选项中检索值
final String catId = (categoryshared.getString("category_id",""));
删除项目取决于此键
if (categorykey.equals(catId))
因此,如果您需要无条件删除所有项目,您可以简单地删除上述条件。
或者,如果您需要删除条件,则必须存储所有可以使用 SQLITE 的密钥(https://developer.android.com/topic/libraries/architecture/room)-最好的方法-
或者您可以将密钥作为 Json 存储在共享首选项中。
然后你可以删除所有依赖键列表。
推荐阅读
- java - Optaplanner 和链接
- vb.net - 为什么画的点有时会消失?
- javascript - 电子:找不到模块 jQuery
- python - Python函数仅返回列数据的第一个值
- visual-studio - 如何(重新)启用 Visual Studio 中的异常中断?
- c# - 如何从 XAML 内部访问嵌套命名空间?
- repository - IT景观工件软件服务的存储库工具
- angular - 如何在 Angular 7/8 中使用 ngx-carousel-3d?
- java - 我没有使用 LinkedHashMap 获得代码中值的正确键
- svn - 是否可以将多个 Subversion 存储库合并为一个而不更改修订版