如何从单独的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的特定方法,所以需要传递该方法
- 显示DialogFragment抛出“无法执行此操作后onSaveInstanceState”错误
- 使用毕加索获得一个位图的回调
- 在提交FragmentTransaction之前检查状态是否保存
- Kotlin多层它参考
- 无法使用RxKotlin更改ActionMenuItemView的文本
- Kotlin中的Android Parcelable:在Parcelable数据类中找不到CREATOR
- 在Kotlin Android中,“AsyncTask类应该是静态还是可能发生泄漏”的正确方法是什么?
- 如何在我的Realm迁移代码中指定一个盒装字段可以为空?
- Android:如何为Kotlin中的所有对象列表创建类型转换器(for Room)