【问题标题】:Cannot cancel nodes from Firebase Database无法从 Firebase 数据库中取消节点
【发布时间】:2022-01-31 21:35:50
【问题描述】:

我正在开发一个应用程序,但我遇到了问题。我开始记录 GPS 位置,但数据开始太多。所以我实现了一个按钮来取消任何在“位置”下(或在“纬度”和“经度”下,对我来说都是一样的)。问题是似乎没有任何东西被取消到数据库中。 我面临这个问题 2 天,我被卡住了。这是我的数据库:

这是我使用的代码:

public class GalleryFragment extends Fragment {
    private GalleryViewModel galleryViewModel;
    private FragmentGalleryBinding binding;
    DatabaseReference mbase;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        galleryViewModel =
                new ViewModelProvider(this).get(GalleryViewModel.class);

        binding = FragmentGalleryBinding.inflate(inflater, container, false);
        View root = binding.getRoot();
        EditText ET = binding.EditProva;
        Button btn = binding.buttonProva;
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        mbase = FirebaseDatabase.getInstance().getReference();

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseReference drTest = FirebaseDatabase.getInstance().getReference();
                drTest.child("Location").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        for(DataSnapshot dataSnapshot:snapshot.getChildren()){
                            dataSnapshot.getRef().setValue(null);
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {
                        Log.w("Errore DB: ", error.getMessage());
                    }
                });
            }
        });

        galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                //textView.setText(s);
            }
        });
        return root;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
   }

在此解决方案之前,我在 :

中使用了该代码
                DatabaseReference latRef = database.getReference("Location/latitude");
                latRef.removeValue();
                DatabaseReference longRef = database.getReference("Location/longitude");
                longRef.removeValue();

但这也不起作用。我检查了其他答案,但没有任何帮助。

【问题讨论】:

  • 我不确定我是否理解。您究竟想取消什么? Location内的孩子是否需要一一移除?
  • 我想删除“位置”下的任何内容。我更喜欢一次性删除它们(请参阅我在帖子末尾报告的另一种解决方案),但考虑到没有任何效果,我试图一个一个地删除它们。代码有点混乱,因为我正在尝试不同的方式。无论如何,任何取消数据的解决方案都可以
  • 您是否尝试将侦听器附加到.setValue(null) 操作以查看是否有问题?
  • 我尝试调试活动。似乎这部分代码从未被调用过
  • 是否调用了 onDataChange 或 onCancelled 中的任何一个?

标签: java android firebase firebase-realtime-database google-cloud-platform


【解决方案1】:

问题是似乎没有任何东西被取消到数据库中。

这很可能是因为您试图删除大量数据。如果要删除 Location 节点下存在的所有内容,则应考虑一次删除合理数量的项目。这可以在客户端完成,但您也可以在Cloud Functions for Firebase 中编写一个函数,以达到完全相同的结果。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2020-04-22
    • 1970-01-01
    • 2017-03-26
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多