Как получить конкретный pushid в firebase?

Я пытаюсь создать приложение, подобное Instagram, с Firebase в качестве бэкэнда, в то время как пользователь добавляет комментарий к любой фотографии, новый идентификатор создается Firebase, теперь я хочу добавить одного дочернего элемента (лайков), когда пользователь нажимает кнопку Like в этом случайно сгенерированном идентификатор комментария, но проблема в том, как получить этот конкретный идентификатор комментария?

pic

0
0
418
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуй это:

  1. Получите commentID перед тем, как сохранить его следующим образом:

    String CommentId = myRef.push (). GetKey ();

  2. Сохраните идентификатор вместе с данными комментария:

    myRef.child (CommentId) .set (yourValuesHashMap);

  3. Теперь, когда вы получаете комментарии, у вас будет идентификатор каждого комментария, и вы можете использовать его для вставки лайков.

Ответ принят как подходящий

Есть два способа добиться этого. Поэтому, если вы хотите получить доступ к конкретному комментарию, вы должны знать что-то уникальное, что идентифицирует этот 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(/* ... */);

Другие вопросы по теме