如何从单独的AsyncTask

时间:2017-06-08 06:36:22

标签: android android-asynctask kotlin kotlin-android-extensions

让我说我有一个带有实例变量 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 修改 loadedMovie (这没关系,因为它在单独的线程上运行)和 onPostExecute (这不行)

我只需在 onPostExecute 中输入 ctx.loadedMovie ,它就不存在了......也许我不明白什么?或者还有另一种方法可以做到这一点,我不知道

1 个答案:

答案 0 :(得分:0)

使用此

class LoadMovieTask(val ctx: MainActivity)

而不是

class LoadMovieTask(val ctx: Activity)

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