API-интерфейсы Firebase являются асинхронными, что означает, что метод onDataChange()
возвращается сразу после его вызова, и обратный вызов будет вызван через некоторое время.Там нет никаких гарантий о том, сколько времени это займет.Таким образом, это может занять от нескольких сотен миллисекунд до нескольких секунд, прежде чем эти данные станут доступны.
Поскольку этот метод сразу возвращается, ваш список ibu_val
, который вы пытаетесь использовать вне метода onDataChange()
, еще не будет заполнен из обратного вызова, и поэтому он всегда пуст.
По сути, вы пытаетесь использовать значение переменной синхронно из API, который является асинхронным.Это не очень хорошая идея, вы должны обрабатывать API-интерфейсы асинхронно, как и предполагалось.
Быстрое решение этой проблемы - уведомить адаптер, как только вы получите все элементы из базы данных, используя:
myrv.notifyDatasetChanged();
Так что добавьте эту строку кода сразу после окончания цикла for.
Если вы собираетесь использовать этот список вне обратного вызова, я рекомендую вам увидеть последнюю часть моего ответа из этого post , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова.Вы также можете взглянуть на это видео для лучшего понимания.