Геокодирование внутри сопрограммы, которая находится внутри наблюдателя, не выполняется - PullRequest
1 голос
/ 19 апреля 2020

В моем фрагменте у меня есть метод 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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...