Почему после выполнения onDataChange() объект становится null?

Рейтинг: 0Ответов: 0Опубликовано: 12.03.2023

У меня есть массив Users, который я заполняю в методе onDataChange() в ValueEventListener(). Когда я проверял через логи переменные, u.email выводил правильное значение из БД FireBase.

Я записываю это значение в массив, и конструктора ValueEventListener() этот элемент массива почему-то становится равным null (проверил через логи), соответственно и ошибка NullPointerException.

Вот код:

static User[] r = new User[1];

static User getById(String id){
    DatabaseReference dbr = FirebaseDatabase.getInstance().getReference("Users");
    ValueEventListener vel = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {

            for(DataSnapshot ds : snapshot.getChildren()){
               User u = ds.getValue(User.class);
               Log.d("log", u.email);
               if(u.email == id)  
                   r[0] = u;
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {}
    };
    dbr.addValueEventListener(vel);
    Log.d("log", r[0].email);
    return r[0];
}

Вот логи:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.teamfind, PID: 16075
java.lang.NullPointerException: Attempt to read from field 'java.lang.String 
com.example.teamfind.User.email' on a null object reference
at com.example.teamfind.User.getById(User.java:54)
at com.example.teamfind.Project.getByString(Project.java:81)
at com.example.teamfind.ProjectsLoader$1.onDataChange(ProjectsLoader.java:28)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:236)
at android.app.ActivityThread.main(ActivityThread.java:8031)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011)

Ответы

Ответов пока нет.