Я работаю над приложением android, используя Firebase и Android Studio. У меня возникли проблемы с извлечением значений с помощью прослушивателей событий значения, потому что я не мог установить значения внутри метода onDataChange
, который будет использоваться иначе, потому что он выполняется асинхронно, поэтому слушатель может выполнить или не выполнить свою задачу до того, как значение потребуется снаружи. Поэтому я решил эту проблему, поставив все, что нужно сделать в методе onDataChange
(реальная спасательная игра!).Когда я гнезду двух слушателей событий значения, они оба запускаются асинхронно или нижний ожидает завершения более высокого?
Но
значение я извлечения в onDataChange
также бывает необходимо внутри другого слушателя. как этот
DatabaseReference mLastnameReference = rootRef.child("users").child("12345678").child(phone);
ValueEventListener lastnameListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try {
yourid = dataSnapshot.getValue().toString();
}
catch (NullPointerException e){
//handle user not registered here
}
DatabaseReference mBioReference = FirebaseDatabase.getInstance().getReference().child("users").child(yourid).child("status");
ValueEventListener bioListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Status = dataSnapshot.getValue().toString();
mTextField = (TextView) findViewById(R.id.status);
mTextField.setText(Status);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mBioReference.addValueEventListener(bioListener);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mLastnameReference.addValueEventListener(lastnameListener);
значение им ждать в первом слушателя yourid
. Мне также нужно это значение, чтобы получить ссылку на базу данных для узла для запуска вложенного прослушивателя. Но когда я запускаю этот код, оба они работают одновременно. Следовательно, получение нулевого исключения в вложенной ссылке на базу данных, потому что в этот момент не удалось получить идентификатор пользователя.