如何从单独的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 (这是不好的)修改loadedMovie

我只是在onPostExecute中键入ctx.loadedMovie ,它不存在..也许我不明白的东西? 或者也许还有另一种方法来做到这一点,我不知道

用这个

 class LoadMovieTask(val ctx: MainActivity) 

代替

 class LoadMovieTask(val ctx: Activity) 

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