Метод onDataChange() не вызывается. Android Firebase

# #android #firebase #firebase-realtime-database

Вопрос:

Я новичок в Firebase, и у меня возникли проблемы с методом onDataChange (). onDataChange() не вызывается.

Вот мой код:

 DatabaseReference mref = FirebaseDatabase.getInstance().getReference("songs");
        System.out.println("I am in Oncreate()");

        ValueEventListener event = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                System.out.println("I am in onDataChange()");

                for(DataSnapshot ds:snapshot.getChildren()){
                    String name  =ds.child("name").getValue(String.class);
                    System.out.println("I am printing name: " name);

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            System.out.println("Firebase Error"  error.toException());

            }
        };
    
        mref.addListenerForSingleValueEvent(event);
    System.out.println("I called mref.addlistner...()");
 

Правила доступа к Firebase следующие:

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

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

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

1. Это System.out.println("Firebase Error" error.toException()); что-то показывает в логкате? Срабатывает ли вообще ваш onDataChange или onCancelled?

2. @AlexMamo Нет, в логкате ничего нет. onDataChange или onCancelled даже не были запущены. Вот что я хочу сказать. Даже System.out.println("I am in onDataChange()"); не System.out.println("Firebase Error" error.toException()); был казнен и никогда не был казнен.

3. Скорее всего, вы не можете подключиться к серверам Firebase или у вас нет подключения к Интернету на устройстве пользователя.

4. @AlexMamo Проблема Решена. Я не указывал URL-адрес базы данных в getInstance() методе.

Ответ №1:

В методе onDataChanged() вы должны добавить условие if, подобное этому, а затем вставить свой код внутрь.

 if(snapshot.exists()){}
 

Это позволит убедиться, что ваш снимок действительно есть.

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

1. Но даже System.out.println("I am in onDataChange()"); это заявление не напечатано.