Как говорили другие: все данные из базы данных Firebase считываются асинхронно. Легче всего это увидеть, добавив еще несколько операторов журнала в ваш код:
Log.d(TAG, "Before attaching listener");
mDatabase.child("Admin")
.child("Info")
.child(uid)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "In listener's onDataChange");
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getUser:onCancelled", databaseError.toException());
}
});
Log.d(TAG, "After attaching listener");
В отличие от того, что вы можете ожидать, вывод этого:
Перед подключением слушателя
После подключения слушателя
Внутри прослушивателя onDataChange
blockquote>. Способ борьбы с асинхронным поведением состоит в том, чтобы пересмотреть вашу проблему.
В настоящий момент ваш код написан: сначала мы загружаем данные, затем записываем его.
Если вы переделаете проблему на: «всякий раз, когда данные загружаются, мы заносим их в журнал» , вы получите код следующим образом:
mDatabase.child("Admin") .child("Info") .child(uid) .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { UserDetails info = dataSnapshot.getValue(UserDetails.class); Log.d(TAG, String.valueOf(dataSnapshot)); mName = info.getName(); Log.d(TAG, mName); } @Override public void onCancelled(DatabaseError databaseError) { Log.w(TAG, "getUser:onCancelled", databaseError.toException()); } });
Таким образом, весь код, который нуждается в данных, должен находиться внутри
onDataChange()
. Кроме того, вы можете создать свой собственный метод обратного вызова и вызвать его изonDataChange()
. Но логика всегда одна и та же: код, который нуждается в данных, запускается изonDataChange()
, когда данные доступны .
Два вопроса после первого взгляда:
https://glitch.com/edit/#!/sunny-ceramic?path=index.html:15:101
BisonPlains_BaseColor.png
Первое, что я рекомендую, это проверить на панели сети браузера и найти 404 ошибки. Перед дальнейшим расследованием убедитесь, что все файлы загружены, как и ожидалось.