Не могу получить данные из базы данных Firebase - PullRequest
0 голосов
/ 16 ноября 2018

чтобы сделать его коротким. Приложение вылетает, когда я хочу получить данные из базы данных 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); - для подсчета кликов пользователя - и он работает ...

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

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

1 Ответ

0 голосов
/ 16 ноября 2018

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

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

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

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