Используя базу данных Firebase в реальном времени, мои записи составляют около 300 единиц. теперь не получает ответ от firebase в datasnapshot - PullRequest
0 голосов
/ 28 мая 2019

Я использую Firebase realtime database в моем приложении для Android.Мои записи в таблице около 300. Я не могу получить данные из Firebase в Datasnapshot.Иногда работает после загрузки 20 минут.Как я могу быстро получить доступ к своим данным и ответам.Он работает хорошо и очень быстро в iOS с той же базой данных и теми же запросами.

private void checkBookingInfo() throws Exception {

    mDatabaseReference.child(FireBaseConstants.BOOKING_INFO_TABLE).limitToFirst(10).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            if (dataSnapshot != null) {
                countArrival = 0;
                countDeparture = 0;

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    //check  arrivals date matches with today's date then increment counter
                    if (snapshot.hasChild(FireBaseConstants.ARRIVAL_DATE)) {
                        String currentDate = Utils.getCurrentDate();
                        String arrivalDate = snapshot.child(FireBaseConstants.ARRIVAL_DATE).getValue().toString();
                        String status = snapshot.child(FireBaseConstants.STATUS).getValue().toString();

                        if (currentDate.equalsIgnoreCase(arrivalDate) && !status.equalsIgnoreCase("Cancel")) {
                            countArrival++;
                        }
                    }
                    //check  departure date matches with today's date then increment counter
                    if (snapshot.hasChild(FireBaseConstants.DEPARTURE_DATE)) {
                        String currentDate = Utils.getCurrentDate();
                        String departureDate = snapshot.child(FireBaseConstants.DEPARTURE_DATE).getValue().toString();
                        String status = snapshot.child(FireBaseConstants.STATUS).getValue().toString();
                        if (currentDate.equalsIgnoreCase(departureDate) && !status.equalsIgnoreCase("Cancel")) {
                            countDeparture++;
                        }
                    }
                }
                setValueInEditText();
            } else {

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.e("notme", "");
        }
    });
}

1 Ответ

0 голосов
/ 28 мая 2019

Для повышения производительности запроса Firebase вы можете добавить индекс в поле, по которому вы упорядочиваете свой запрос.Как и

  {
   "rules": {
      "YOUR_NODE": {
         ".indexOn": ["FIELD1", "FIELD2"]
     }
   }
  }

Вы можете найти ссылку помощи здесь

Firebase также говорит здесь

Важно:Метод onDataChange () вызывается каждый раз, когда данные изменяются по указанной ссылке на базу данных, включая изменения дочерних элементов.Чтобы ограничить размер снимков, прикрепляйте их только на самом высоком уровне, необходимом для просмотра изменений.Например, присоединение слушателя к корню вашей базы данных не рекомендуется.

Но даже если индекс не применяется, по-прежнему 20 минут - это много времени, вам нужно проверить исходный код:другая проблема в пользовательском интерфейсе, возможно, данные поступают, но не заполняются в пользовательском интерфейсе.

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