Если я правильно понимаю, вы пытаетесь записать значение вашего свойства description
(или любого другого свойства) вне обратного вызова, и вы получаете null
, верно?
Это происходит потому, что API-интерфейсы Firebase имеют значение asynchronous
, что означает, что метод onDataChange()
возвращается сразу после его вызова, и обратный вызов из Задачи, которую он возвращает, будет вызван через некоторое время. Там нет никаких гарантий о том, сколько времени это займет. Таким образом, получение этих данных может занять от нескольких сотен миллисекунд до нескольких секунд. Поскольку этот метод немедленно возвращает значение, значение вашего свойства description
, которое вы пытаетесь использовать вне метода onDataChange()
, еще не будет заполнено из обратного вызова.
По сути, вы пытаетесь вернуть значение синхронно из асинхронного API. Это не очень хорошая идея. Вы должны обрабатывать API-интерфейсы асинхронно, как и предполагалось.
Быстрое решение этой проблемы - использовать значение description
только внутри метода onDataChange()
, в противном случае я рекомендую вам увидеть последнюю часть моего ответа из этого post , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова. Вы также можете взглянуть на это видео для лучшего понимания.