我有一个android项目,我从firebase检索数据。一切正常,但是当我在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);
}
答案 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
,在两种情况下调用:
onChildAdded
。onChildAdded
。从Firebase控制台删除节点时,会调用onChildRemoved
方法。但是,由于您将该方法留空,因此当您从控制台删除数据时,您的应用无法执行任何操作。
要使您的应用行为正确,您需要实施onChildRemoved
。通常,这涉及找到与快照匹配的UI元素并将其删除。