Почему после выполнения onDataChange() объект становится null?
У меня есть массив 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)
Источник: Stack Overflow на русском