删除firebase控制台中的数据不会从存储对象值的arraylist中删除数据

时间:2017-10-15 17:41:34

标签: android firebase firebase-realtime-database

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

以下是图片的链接:Click here

所以,假设我删除了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);
    }

2 个答案:

答案 0 :(得分:1)

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

 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感兴趣。

答案 1 :(得分:0)

``:

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

您只实现了onChildAdded,在两种情况下调用:

  1. 首次附加监听器时,会为每个现有的孩子调用onChildAdded
  2. 稍后添加孩子时,会为该孩子调用onChildAdded
  3. 从Firebase控制台删除节点时,会调用onChildRemoved方法。但是,由于您将该方法留空,因此当您从控制台删除数据时,您的应用无法执行任何操作。

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