Как запросить данные Firebase в Android? - PullRequest
0 голосов
/ 26 апреля 2018

Мои данные из базы данных выглядят так:

"worldwide" : [{
  "key1" : {
    "movie_id": 100,
    "release_date": 1524182400000,
    "description": "Cool movie here"
  },
  "key2" : {
    "movie_id": 101,
    "release_date": 1525046400000,
    "description": "Plot is cool"
  }
}]

"europe" : [{
  "key1" : {
    "movie_id": 100,
    "release_date": 1516798528489,
    "description": "Cool movie here"
  },
  "key3" : {
    "movie_id": 102,
    "release_date": 1525046400000,
    "description": "Cool plot"
  }
}]

Примечание. Оба списка находятся внутри списка людей под названием release

Я пытался в прошломчасов, чтобы запросить мои данные в java / android, чтобы обе данные в обоих списках соединились вместе, чтобы создать один полный список с фильмами, упорядоченными по release_date (в миллисекундах), и для дублированных записей, которые я хочу получить для информации release_date в массиве Europe, чтобыиметь приоритет, поэтому, если movie_id находится в обоих списках и у него разные даты выпуска в массиве по всему миру и в массиве Europe, я хочу, чтобы запись в массиве Europe была сохранена в полном списке.Например, «movie_id»: 100 появляется в обоих списках.Спасибо.

Мой код Java:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

Query query = null; // I don't know how to structure my query
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            for (DataSnapshot movie: dataSnapshot.getChildren()) {

            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Буду признателен за любые советы, как я хотел бы услышать, если есть какой-либо лучший способ выполнить то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

В Firebase нет конструкции для чтения данных из обоих списков одним запросом.Это означает, что вам придется:

  • либо использовать двух слушателей (один на worldwide и один на europe) и объединить результаты этих слушателей в клиенте.
  • или использовать одного слушателя на узле над worldwide и europe, а затем выполнить итерацию по полученному снимку.

Последнее проще в коде, но может быть менее эффективным.

ref.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot movie: dataSnapshot.getChild("europe").getChildren()) {
            System.out.println(movie.getKey()+": "+movie.getChild("movie_id").getValue());
        }
        for (DataSnapshot movie: dataSnapshot.getChild("worldwide").getChildren()) {
            System.out.println(movie.getKey()+": "+movie.getChild("movie_id").getValue());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw new databaseError.toException();
    }
});
0 голосов
/ 26 апреля 2018

Прежде всего, вам необходимо убедиться, что ваша база данных имеет правильные .indexOn правила .Это обеспечит возможность запроса / сортировки ваших данных.

Далее вы можете добавить запрос в ссылку на базу данных:

firebase::database::Query query =
reference.GetReference("worldwide").OrderByChild("release_date");

Наконец, прочитайте Сортировка /Запрос из документации.


Чтобы объединить два списка, просто выполните два запроса и добавьте фильмы в параллельный список.Затем отсортируйте список.

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