Как говорит Имран, когда вы присоединяете addValueEventListener
к ссылке, она открывает сокет для продолжения прослушивания изменений в этой ссылке.
Когда вы делаете удаление, обновление или любое изменение в этой ссылкессылка, триггер сработает, и вы будете добавлять новые элементы по этой ссылке из вашего первого фрагмента кода.
Что вы можете сделать, это прикрепить addListenerForSingleValueEvent
, и он будет срабатывать только один раз.
Таким образом, после удаления определенного узла он не будет запускать другой код, который прослушивает этот узел.
@Override
public void onStart() {
super.onStart();
contactsRef.child(currentFirebaseUser.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
usersFriendsKey = dsp.getKey();
Log.i("friendsKey", usersFriendsKey);
usersRef.child(usersFriendsKey).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
userData = dataSnapshot.getValue(UserData.class);
contactsArrayList.add(userData);
chatListAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
String error = databaseError.getMessage();
Toast.makeText(getActivity(), "Error occured", Toast.LENGTH_SHORT).show();
}
});
}
}