Я пытаюсь создать приложение, подобное Instagram, с Firebase в качестве бэкэнда, в то время как пользователь добавляет комментарий к любой фотографии, новый идентификатор создается Firebase, теперь я хочу добавить одного дочернего элемента (лайков), когда пользователь нажимает кнопку Like в этом случайно сгенерированном идентификатор комментария, но проблема в том, как получить этот конкретный идентификатор комментария?
Попробуй это:
Получите commentID перед тем, как сохранить его следующим образом:
String CommentId = myRef.push (). GetKey ();
Сохраните идентификатор вместе с данными комментария:
myRef.child (CommentId) .set (yourValuesHashMap);
Теперь, когда вы получаете комментарии, у вас будет идентификатор каждого комментария, и вы можете использовать его для вставки лайков.
Есть два способа добиться этого. Поэтому, если вы хотите получить доступ к конкретному комментарию, вы должны знать что-то уникальное, что идентифицирует этот pcommentll. Первое решение - сохранить этот случайный идентификатор в переменной именно в тот момент, когда вы отправляете новый комментарий в базу данных с помощью метода push()
. Чтобы получить этот идентификатор, вы можете использовать следующие строки кода:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String commentId = rootRef
.child(UserId)
.child(PhotoId)
.child("comments")
.push()
.getKey();
Вы также можете сохранить этот идентификатор внутри объекта комментария, если вам понадобится его использовать позже. Вот как это выглядит в коде:
Map<String, Object> map = new HashMap<>();
map.put("noOfLikes", 0);
map.put("commentId", commentId);
rootRef
.child(UserId)
.child(PhotoId)
.child("comments")
.child(commentId)
.updateChildren(map);
Получив этот key
, вы можете использовать его в своей ссылке для обновления количества лайков. Этот тип операции обычно выполняется с использованием Транзакция Firebase, и для этого я рекомендую посмотреть свой ответ из этого сообщение, в котором я объяснил, как обновить свойство оценки, но тот же принцип применим в случае лайков.
Второй подход - создать целую новую коллекцию верхнего уровня, подобную этой:
Firebase-rot
|
--- comments
|
--- commentId
|
--- noOfLikes: 1
Используя это решение, вам будет проще запрашивать базу данных, потому что для получения количества лайков вам понадобится только эта простая ссылка:
DatabaseReference noOfLikesRef = rootRef
.child("comments")
.child(commentId)
.child("noOfLikes");
noOfLikesRef.addListenerForSingleValueEvent(/* ... */);