Как изменить переменную экземпляра из отдельного 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, необходимо передать это

Другие вопросы по тегам