Android Firebase onDataChange не вызывается?

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-realtime-database

Вопрос:

В моей базе данных Firebase более 40 000 узлов. Но всякий раз, когда я пытаюсь прочитать ключ из моего кода Android, onDataChange метод не вызывается.

MyCode:

  Firebase firebase = new Firebase(my url);
            firebase.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    Log.d(TAG, "onDataChange : "   dataSnapshot);

                    if (dataSnapshot.getValue() != null) {

                        Map map = (Map) dataSnapshot.getValue();

                        Iterator accountIterator = map.entrySet().iterator();
                        while (accountIterator.hasNext()) {

                            Map.Entry accountPair = (Map.Entry) accountIterator.next();

                            Log.d(TAG, "accountPair : Key : "   accountPair.getKey()   " , Value : "   accountPair.getValue());
                        }

                    }
                }

                @Override
                public void onCancelled(FirebaseError firebaseError) {
                    Log.d(TAG, "onCancelled : "   firebaseError);
                }
            });
  

Я хочу получить сведения о студенческом узле

Пожалуйста, дайте мне знать. Я не могу найти какую-либо проблему в коде. Пожалуйста, предложите мне какое-нибудь решение.

Комментарии:

1.firebase.google.com/docs/database/android/… github.com/firebase/quickstart-android/blob/master/database/app/…

2. Ссылка на вашу базу данных кажется неправильной. Кроме того, ValueEventListener вызывается при изменении значения вашего ссылочного ключа. Но я не вижу такой ссылки. Пожалуйста, обновите эту часть вопроса, если это просто ошибка.

3. @NishantDubey Нет, ссылка идеальна, я проверил URL-адрес ссылки, он отлично работает в браузере, так что не так в коде? пожалуйста, помогите

4. Какую версию firebase вы используете?

5. Вы проверили свой logcat, чтобы узнать, вызывается ли onCancelled() он. Потому что это наиболее вероятная проблема. Кроме того, трудно сказать, что не так с этим кодом. Более вероятно, что проблема вызвана другой частью приложения. Покажите URL-адрес (его скрытие не делает ваше приложение более безопасным), покажите данные в этом месте (в виде текста в формате JSON, без скриншота), покажите свои правила безопасности (в виде текста в формате JSON, без скриншота) и т. Д.

Ответ №1:

Первое, что нужно сделать, это проверить, что у вас есть правильные разрешения на чтение из вашей базы данных. Перейдите к https://console .firebase.google.com/project /[your_database_url]/база данных/правила и проверка. Не идеально в prod, но для тестирования вы можете установить для чтения значение true

   {
  "rules": {
     ".read": true,
     ".write": "auth != null"
   }
  }
  

Следующая ошибка — помнить, что слушатели запускают асинхронные и забывают вызовы. Таким образом, любые манипуляции с данными должны выполняться после получения данных в методе onDataChange().

Ответ №2:

Откройте ссылку Firebase -> База данных -> Правила -> Вероятно, значения здесь в вашем случае являются ложными. Сделайте его истинным следующим образом.

   {
    "rules": {
      ".read": true,
      ".write": true
    }
  }