在MainActivity I' ve
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mDatabaseReference = FirebaseUtils.getAllPostsDatabaseReference();
mDatabaseReference.keepSynced(true);
}
出现了一个问题,即在添加新孩子时会多次显示相同的数据,以避免我在儿童监听器中添加了一个技巧
@Override
public void onResume() {
super.onResume();
cleanUp();
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
try{
if (dataSnapshot.exists() && dataSnapshot.hasChildren() && !dataSnapshot.equals(null)){
MyObject mo = dataSnapshot.getValue(MyObject.class);
mList.add(mo);
mAdapter.notifyDataSetChanged();
} else {
///
}
} catch (Exception e){
e.printStackTrace();
}
}
// omitting @Override methods
};
mQuery = getQuery();
mQuery.addChildEventListener(mChildEventListener);
mAdapter = new MyAdapter((AppCompatActivity)getContext(), mList);
mRecyclerView.setAdapter(mAdapter);
}
当活动恢复时,我调用
的cleanUp()
private void cleanUp(){
try {
if (mAdapter != null && mList.size() > 0){
mAdapter.clear();
mList.clear();
Log.e("ADAPTER", "Cleared");
}
} catch (Exception e){
e.printStackTrace();
}
}
这一点App已恢复它工作正常并且没有任何数据重复,但是当应用程序在设备上运行并且数据被添加到子设备时,它会复制新添加数据的实例,因为可能存在设备使用应用程序(即如果当前有10个活动设备正在使用该应用程序,那么新添加的每个设备分别显示重复的1,2,3,4,5,6,7,8,9次,并不是这种奇怪的行为?)
好的我尝试做这样的改变add cleanUp();在onChildAdded()
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
cleanUp();// Added here to avoid data duplication
try{
if (dataSnapshot.exists() && dataSnapshot.hasChildren() && !dataSnapshot.equals(null)){
MyObject mo = dataSnapshot.getValue(MyObject.class);
mList.add(mo);
mAdapter.notifyDataSetChanged();
} else {
///
}
} catch (Exception e){
e.printStackTrace();
}
}
// omitting @Override methods
};
此时没有发生重复,只显示新添加的数据,并清除所有其他子项。