Из приложения заполняю данные на сервер Firebase, и тут же отображаю их в RecyclerView, по при первом запуске когда происходит запись на сервер в RecyclerView намного больше пунктов чем должно быть, на сервере их нет, они являются клонами друг друга. Вот код:
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(userId).exists()){
reference.child(userId).child("KEYS").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
codes.add(dataSnapshot.getValue(Codes.class));
codesAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Codes code = dataSnapshot.getValue(Codes.class);
int index = getItemIndex(code);
codes.set(index, code);
codesAdapter.notifyItemChanged(index);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Codes code = dataSnapshot.getValue(Codes.class);
int index = getItemIndex(code);
codes.remove(index);
codesAdapter.notifyItemRemoved(index);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}else{
if(newArr.contains("newArr")) {
reference.child(userId).child("Тут не пусто").setValue("Да да это правда");
for (int k = 1; k < 4; k++) {
String cod = "G-" + (k + (k * 3)) * 5553;
reference.child(userId).child("KEYS").child(cod).child("cod").setValue(cod);
}
SharedPreferences.Editor editor = newArr.edit();
editor.putString("newArr","false");
editor.apply();
}
}
}
@Override public void onCancelled(DatabaseError databaseError) { }
});
Решил вопрос выносом функции получения данных:
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.child(userId).exists()){
reference.child(userId).child("Тут не пусто").setValue("Да да это правда");
for (int k = 1; k < 4; k++) {
String cod = "G-" + (k + (k * 3)) * 5553;
reference.child(userId).child("KEYS").child(cod).child("cod").setValue(cod);
}
}
}
@Override public void onCancelled(DatabaseError databaseError) { }
});
reference.child(userId).child("KEYS").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
codes.add(dataSnapshot.getValue(Codes.class));
codesAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Codes code = dataSnapshot.getValue(Codes.class);
int index = getItemIndex(code);
codes.set(index, code);
codesAdapter.notifyItemChanged(index);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Codes code = dataSnapshot.getValue(Codes.class);
int index = getItemIndex(code);
codes.remove(index);
codesAdapter.notifyItemRemoved(index);
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости