Решение, которое вы дали, очень хорошее, но зачем удалять слушателя внутри обратного вызова?Я напишу вам код, чтобы быть более простым.Пожалуйста, смотрите это ниже:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference listIdRef = rootRef.child("list").child(list_id);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String comment = ds.getValue(String.class);
list.add(comment);
}
//Do what you need to do with your list
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
listIdRef.addListenerForSingleValueEvent(valueEventListener);
Не игнорируйте ошибки.
Самый простой способ, которым вы можете добавить нового дочернего элемента в ваш 08-10-18
узел, без необходимости получатьenitire list, будет использовать только следующие строки кода:
Map<String, Object> map = new HashMap<>();
map.put("5", "comment55");
rootRef.child("list").child(list_id).updateChildren(map);
Но даже лучшее решение будет использовать вместо списков, карты и дочерние элементы должны быть добавлены с использованием метода push()
.Таким образом, ваша структура базы данных должна выглядеть следующим образом:
Fireabase-root
|
--- usr100
|
--- 08-10-18
|
--- randomId: "comment1"
|
--- randomId: "comment2"
|
--- randomId: "comment3"
|
--- randomId: "comment4"
И код должен выглядеть следующим образом:
String key = rootRef.child("list").child(list_id).push().getKey();
Map<String, Object> map = new HashMap<>();
map.put(key, "comment5");
rootRef.child("list").child(list_id).updateChildren(map);
В этом случае вам не нужно беспокоиться о ключе, которыйбольше не числоБез помощи метода push()
вам нужно получить весь список, как описано в первой части моего ответа, добавить новый элемент и обновить список в базе данных.