【问题标题】:deleting data in firebase console is not deleting data from the arraylist where I stored the object value在firebase控制台中删除数据不会从我存储对象值的arraylist中删除数据
【发布时间】:2017-10-15 17:41:34
【问题描述】:

我有一个从 firebase 检索数据的 android 项目。一切正常,但是当我在 firebase 控制台中删除对象时,它不会反映在应用程序中。

这是图片的链接:

所以,假设我在 firebase 中删除 david hafiz 子节点,它不会在应用程序中删除。我尝试了很多,但找不到正确的方法。我是android编程的新手,希望有人可以帮助我。谢谢。

更新

 mDatabase = FirebaseDatabase.getInstance();
        mReference = mDatabase.getReference().child("Students").child("Marks");

        mReference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Log.d("value", "" + dataSnapshot);
                    fetchData(dataSnapshot);


            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                    fetchData(dataSnapshot);
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        return view;
     }


private void fetchData(DataSnapshot dataSnapshot) {
            StudentData value = dataSnapshot.getValue(StudentData.class);
            Log.v("StudentData Fragment", "" + dataSnapshot.getValue());

            // Get an iterator.
            Iterator<StudentData> ite = mMarksList.iterator();

            while (ite.hasNext()) {
                StudentData iteValue = ite.next();
                if (iteValue.equals(value))
                    ite.remove();
            }
            mMarksList.add(value);
            Collections.sort(mMarksList, new MarksComparator());

            String title = mReference.getKey();

            // specify an adapter
            mAdapter = new MyAdapter(getContext(), mMarksList, title);
            mAdapter.notifyDataSetChanged();
            mRecyclerView.setAdapter(mAdapter);
    }

【问题讨论】:

  • 请分享minimum code that is needed to reproduce the problem。这样就更有可能有人能够提供帮助。
  • 好的,我将代码粘贴到我在arraylist中添加对象的位置。谢谢你的建议。
  • Firebase-ui 是 Firebase 的视图绑定库,由 Firebase 人员官方支持他们自己制作的 FirebaseRecyclerAdapter 以一种您甚至不必考虑的方式解决了这个问题github.com/firebase/FirebaseUI-Android 是非常适合任何入门项目

标签: android firebase firebase-realtime-database


【解决方案1】:

``:

中有四个相关的方法
  • onChildAdded
  • onChildRemoved
  • onChildChanged
  • onChildMoved

你只实现了onChildAdded,分两种情况调用:

  1. 当您第一次附加侦听器时,会为每个现有子级调用 onChildAdded
  2. 稍后添加孩子时,会为该孩子调用onChildAdded

当您从 Firebase 控制台删除节点时,会调用 onChildRemoved 方法。但是由于您将该方法留空,因此当您从控制台中删除数据时,您的应用不会执行任何操作。

要使您的应用正常运行,您需要实现onChildRemoved。通常这涉及找到与快照匹配的 UI 元素并将其删除。

【讨论】:

    【解决方案2】:

    您可以存储密钥以更新或删除它,例如:

     ArrayList<String> mKeys = new ArrayList<String>();  
    
    
      @Override
      public void onChildAdded(DataSnapshot dataSnapshot, String s) {
           String key = dataSnapshot.getKey();
           mKeys.add(key);
           adapter.notifyDataSetChanged();
    
           }
    
      @Override
      public void onChildRemoved(DataSnapshot dataSnapshot) {
           String key = dataSnapshot.getKey();
           int index = mKeys.indexOf(key);
           mMarksList.remove(/*index*/); // or data
    
           adapter.notifyDataSetChanged();
           }
    

    您可能也对如何update 感兴趣。

    【讨论】:

    • 我没有正确得到您的答案。当 Firebase 控制台中不存在对象时,如何获取 getKey() 值。不知何故,即使在 firebase 控制台中删除后,它仍然保留在 arraylist 中。
    猜你喜欢
    • 2014-07-18
    • 2018-07-09
    • 2019-04-22
    • 2020-10-24
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2020-05-03
    • 2020-12-29
    相关资源
    最近更新 更多