не сохраняются данные в переменную в методе subscribe() RxJava
Всем привет. Не могу понять почему в теле метода subscrube() я присваиваю значение переменной coordinates,и сразу же вывожу значение переменной coordinates в Log и мне отображает нужный мне результат результат, но когда я возвращаю значение переменной coordinates из метода getCoordinates() то возвращает пустую строку. За ранее благодарю за помощь.
private val coordinates = ""
private fun getCoordinates(): String? {
getLastDeviceLocation()
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe({
coordinates = "${it.latitude}, ${it.longitude}"
Log.i("mLog", coordinates)// выводит нужные мне координаты
},
{ Log.i("ERROR", "error = ${it.localizedMessage}") }
)
return coordinates // Возвращает пустую строку
}
Ответы (1 шт):
Все логично. Вы внутри метода getCoordinates подписываетесь на событие "Получены новые координаты". Еще и слушаете в главном потоке. У вас нулевая вероятность, что наблюдатель сработает в этот кадр. И у вас сначала отрабатывает метод getCoordines, в котором создается подписка и возвращается пустая еще строка. Через некоторое время наблюдатель получит новые координаты и запишет в вашу переменную, но метод geCoordinates уже давно выполнится.
Вам однозначно не стоит оставлять метод в таком виде. У вас должен быть один метод, который создает подписку и вызывается только один раз, и другой, в котором вы получаете то, что хранится в переменной coordinates, с учетом того что там могло еще ничего не прийти
PS Еще почитайте про disposable. Сейчас вы создаете с каждым вызовом getCoordinates новую подписку, а старые никуда не деваются, у вас утечка памяти