Есть activity с картой, при нажатии на карту происходит асинхронный запрос и возвращаются данные JSON. Одно из полей - адрес. Мне нужно вывести адрес в TextView. Проблема заключается в том, что когда данные приходят я их вижу в логах, но в TextView они обновятся только лишь после следующего нажатия, когда в логах появится другой адрес. Есть решение через WeakReference, но я не представляю как можно его реализовать.
class ParseTask(GLOBAL_POS: LatLng, GLOBAL_POS_PROVIDER: LatLng) : AsyncTask<String, Void, String>() {
var weakActivity: WeakReference<MapsActivity>? = null
override fun doInBackground(vararg p0: String?): String? {
...
println(GLOBAL_ADDRESS)
...
return GLOBAL_ADDRESS
}
override fun onPostExecute(result: String?) {
val activity = weakActivity!!.get()
if (activity != null){
activity.address.text = GLOBAL_ADDRESS.toString()
}
}
}
Пока решение выглядит так и оно решает мою проблему, но должно быть более элегантное решение:
try {
Thread.sleep(600)
} catch (e: Exception) {
}
Получается проблема в том, чтобы присвоить значение после завершения AsyncTask. Если делать в сразу после вызова AsyncTask, то присваивается пустое значение, а в самом AsyncTask не получается привязаться к TextView.
Запуск вашего ParseTask
должен вот так выглядеть:
val task = ParseTask(...)
task.weakActivity = WeakActivity(instanceOfMapsActivity)
task.execute()
Виртуальный выделенный сервер (VDS) становится отличным выбором
Допустим, есть строки А, Б, В, Я, ВПосле добавления в какую коллекцию в ней будет только А, Б, В, Я? Или велосипед писать?
Пытаюсь запустить shell скрипт из java, но ничего не происходитОбычный txt запускается без проблем
В 1С при обходе результата запроса можно обходить запрос иерархическиКаждый итоговый результат содержит кроме полей, еще и вложенный результат,...