Как изменить переменную экземпляра из отдельного AsyncTask
Скажем, у меня есть активность с переменной экземпляра loadedMovie и метод, который выполняет AsyncTask, который находится в другом файле
class MainActivity:AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
var loadedMovie: Movie? = null
....
fun loadMovie() {
val task = LoadMovieTask(this)
task.execute()
}
}
отдельный AsyncTask
class LoadMovieTask(val ctx: Activity) : AsyncTask<Void, Void, Void>() {
var movie: Movie? = null
override fun onPreExecute() {
....
}
// loading information from network
override fun doInBackground(vararg params: Void?): Void? {
movie = load()
return null
}
// here i modify views with help of kotlin android extensions
override fun onPostExecute(result: Void?) {
....
}
}
Проблема в том, что я не могу изменить загруженный фильм ни из doInBackground (это нормально, потому что он работает в отдельном потоке), ни из onPostExecute (что не так).
я просто набираю ctx.loadedMovie в onPostExecute и его там нет.. может быть, я чего-то не понимаю? или, может быть, есть другой способ сделать это, о котором я не знаю
1 ответ
Решение
Использовать этот
class LoadMovieTask(val ctx: MainActivity)
вместо
class LoadMovieTask(val ctx: Activity)
У MainActivity есть метод, а не сам класс Activity Android. Поэтому, даже если вам нужен контекст, так как вы пытаетесь получить доступ к методу, специфичному для MainActivity, необходимо передать это