0

假设我有一个带有实例变量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(这不行)修改loadedMovie

我只是在 onPostExecute 中键入 ctx.loadedMovie并且它不存在.. 也许我不明白什么?或者也许还有另一种我不知道的方法

4

1 回答 1

0

用这个

class LoadMovieTask(val ctx: MainActivity)

代替

class LoadMovieTask(val ctx: Activity)

MainActivity 有方法,而不是 Android 的 Activity 类本身。因此,即使您需要上下文,由于您正在尝试访问特定于 MainActivity 的方法,因此需要传递它

于 2017-06-08T06:40:38.237 回答