首页 > 解决方案 > 只有最后添加的项目会在 Android 的 Firebase 实时数据库中删除

问题描述

请耐心等待,因为我是 Firebase 的新手。我创建了一个应用程序来让用户添加项目和类别。我所做的是,当我添加一个类别时,我将CategoryIdor 键保存在共享首选项中,当我想检索它时,我将它与类别中的键进行比较。

这里发生的情况是,只有我添加的最后一个项目会被删除,之后不会删除其他项目。

有人可以告诉我下面的代码有什么问题吗?谢谢你的帮助。

这是我的结构

在此处输入图像描述

这是我的代码:

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) {

            }
        });

    }

标签: androidfirebase-realtime-database

解决方案


取决于您的代码,您仅删除其密钥等于共享首选项中上次保存的密钥的项目。

从共享首选项中检索值

final String catId = (categoryshared.getString("category_id",""));

删除项目取决于此键

if (categorykey.equals(catId))

因此,如果您需要无条件删除所有项目,您可以简单地删除上述条件。

或者,如果您需要删除条件,则必须存储所有可以使用 SQLITE 的密钥(https://developer.android.com/topic/libraries/architecture/room)-最好的方法-

或者您可以将密钥作为 Json 存储在共享首选项中。

然后你可以删除所有依赖键列表。


推荐阅读