В моем фрагменте у меня есть метод bindUI()
, который содержит некоторые liveData, которые я наблюдаю, и внутри лямбды я хочу использовать значение location
(которое содержит значения широты и долготы), чтобы получить список адресов на основе координат, которые он содержит. Мне сказали, что геокодирование должно выполняться внутри сопрограммы, поэтому я пытаюсь это сделать, но код внутри сопрограммы launch
, похоже, не работает. Я разместил записи в журнале, но они не выполняются, и в моем textView, похоже, нет результата. Отладчик также говорит, что при установке точки останова на нем нет исполняемого кода. Что я тут испортил?
private fun bindUI() = launch(Dispatchers.Main) {
// fetch the location
val weatherLocation = viewModel.weatherLocation.await()
// Observe the location for changes
weatherLocation.observe(viewLifecycleOwner, Observer { location ->
if (location == null) return@Observer
//TODO:sp update the location text view
launch(Dispatchers.Main) {
val task = updateLocation(location)
locationTxtView.text = task[0].countryName
}
})
}
А вот и updateLocation()
веселье:
private suspend fun updateLocation(location: WeatherLocation): MutableList<Address> {
return async(Dispatchers.IO) {
val geocoder = Geocoder(activity, Locale.getDefault())
val addr = geocoder.getFromLocation(location.latitude, location.longitude, 10)
return@async addr
}.await()
}