Не могу получить данные из базы данных Firebase

короче. Приложение вылетает, когда я хочу получить данные из базы данных Firebase. Вот код:

database = FirebaseDatabase.getInstance();
commu = database.getReference("Community");

longi = voteLoni.getText().toString();
lati = voteLati.getText().toString();
final String latiLong = lati + "  -  " + longi;

commu.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Community")
                    .child(latiLong);

            ref.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    count= dataSnapshot.child("count").getValue(long.class);
....

Структура: Дети Сообщества - это согласования

DB
  - Community 
    - 89.8 - 90.9
      - count: 4
      - example: 2
      - example2: 4
      - example3: 8
    - 120.9 - 89.9 
      - count: 45
      - example: 24
      - example2: 40
      - example3: 81

И вот в чем ошибка:

Process: package, PID: 21441
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
    at app.Activity.Real$2$1.onDataChange(Real.java:122)
    at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@16.0.3:183)
    at com.google.firebase.database.obfuscated.zzap.zza(com.google.firebase:firebase-database@@16.0.3:75)
    at com.google.firebase.database.obfuscated.zzca.zza(com.google.firebase:firebase-database@@16.0.3:63)
    at com.google.firebase.database.obfuscated.zzcd$1.run(com.google.firebase:firebase-database@@16.0.3:55)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:251)
    at android.app.ActivityThread.main(ActivityThread.java:6589)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

Но в другом упражнении я использую тот же код count= dataSnapshot.child("count").getValue(long.class); - для подсчета кликов пользователя - и он работает ...

заранее спасибо

Редактировать: Я добавил второго потомка и несколько значений в базу данных. DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Community").child(latiLong); тоже редактируется, но это не так?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет необходимости писать вложенные слушатели ..

Если у вас есть такая структура:

DB
- Community 
  - 1
    - count: 4

И у вас нет доступа к дочернему 1, тогда просто сделайте следующее:

database = FirebaseDatabase.getInstance();
commu = database.getReference("Community");

commu.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           for(DataSnapshot ds : dataSnapshot.getChildren()){
                count= ds.child("count").getValue(Long.class);
               }
           }
 .....

Это получит значение count.

Большое спасибо, сэр!

Hansi 16.11.2018 19:47

эй, я попробовал еще раз. Когда детей больше, чем один, он не работает. Так это работает только с одним ребенком? Когда я добавляю еще один, он вылетает с той же ошибкой нулевой точки

Hansi 17.11.2018 09:25

если у вас есть еще один ребенок, вам нужно написать childName= ds.child("messages").getValue(Long.class);

Peter Haddad 17.11.2018 10:05

к сожалению, у меня это не работает. Хорошо, я должен сказать, что теперь в нем есть еще три значения, и я хочу их все. Я отредактировал пост. Есть ли у вас какие-либо идеи?

Hansi 17.11.2018 13:23

сделать это int example = ds.child("example").getValue(Integer.class);

Peter Haddad 17.11.2018 15:34

Спасибо. Таким образом, с этим кодом нет сообщения об ошибке. Но как я могу использовать его вне цикла for? Я объявил int вне цикла, извините, я не знаком с программированием

Hansi 18.11.2018 10:35

Отметьте это stackoverflow.com/questions/48720701/…

Peter Haddad 18.11.2018 11:34

Другие вопросы по теме