API Firebase имеют значение asynchronous
, что означает, что функция onDataChange()
возвращается сразу после ее вызова, и обратный вызов из задачи, которую она возвращает, будет вызван через некоторое время.Там нет никаких гарантий о том, сколько времени это займет.Таким образом, получение этих данных может занять от нескольких сотен миллисекунд до нескольких секунд.Поскольку этот метод немедленно возвращается, значение вашей переменной trainer
, которую вы пытаетесь использовать, еще не будет заполнено из обратного вызова.Поэтому простое создание его в качестве глобальной переменной не поможет, и его значение всегда будет false
.
По сути, вы пытаетесь использовать значение синхронно из асинхронного API.Это не очень хорошая идея.Вы должны обрабатывать API-интерфейсы асинхронно, как и предполагалось.
Для быстрого решения этой проблемы можно использовать значение вашей bool
переменной only внутри обратного вызова, в противном случае я рекомендую вам просмотретьпоследняя часть моего ответа от этого поста , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова.