Как извлечь данные из firebase на основе значения некоторого ключа, который находится во вложенном объекте json - PullRequest
0 голосов
/ 17 октября 2018

У меня есть такая структура в базе данных Firebase для моих записей.

"posts" : {
"-LP-UfzuUHFJOkY0Ogb9" : {
  "dislikeCount" : "0",
  "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/privato-dfb2c.appspot.com/o/images%2F2309fdab-0d78-44e5-af1f-8d256efdf6fd.jpg?alt=media&token=1276804f-d48c-4e06-8982-309fd539a397",
  "likeCount" : "0",
  "postByUser" : {
    "aboutMe" : "death is inevitable",
    "countryCode" : "+91",
    "imageUrl" : "https://i.imgur.com/hAazykl.jpg",
    "mobileNumber" : "number",
    "name" : "Sid",
    "userName" : "deathcode"
  },
  "timeStamp" : 1539754082148,
  "title" : "This is cool, lowest price ever on grocers.",
  "type" : 3
}
}

Теперь мне нужно получить все сообщения, сделанные определенным пользователем, на основе значения userName в объектном объекте json "postByUser».Я следовал определенным инструкциям, чтобы решить эту проблему, но все они работали со значением ключа json, которое находилось в корневом элементе публикации, а не под другим объектом json в элементе публикации с помощью

 Query query = dbRef.child("posts").orderByChild("title").equalTo("sometitle");

, но как мне использоватьэто для вложенного объекта json?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете передать путь к orderByChild, поэтому:

Query query = dbRef.child("posts").orderByChild("postByUser/name").equalTo("deathcode");
0 голосов
/ 17 октября 2018

Вы можете получить все дочерние значения брата после использования запроса orderByChild() и его dataSnapshot.

Код для этого выглядит примерно так:

//ref is the correct database reference to your firebase database

ref.orderByChild("userName").equalTo(userNameYouWant).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        for (DataSnapshot ds: dataSnapshot.getChildren()) {
            String aboutMe = ds.child("aboutMe").getValue(String.class);
        }

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

Вы можете получитьдругие значения узла-брата, использующие тот же способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...