如何从单独的 AsyncTask 修改实例变量
How to modify instance variable from separate AsyncTask
假设我有一个带有实例变量 loadedMovie 的 activity 和一个在另一个文件中执行 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?) {
....
}
}
问题是:我无法从 loadedMovie 修改 doInBackground(其中没问题,因为它在单独的线程上运行)和 onPostExecute(这不行)
我只是在 onPostExecute 中键入 ctx.loadedMovie 但它不在那里.. 也许我不明白什么?或者也许还有另一种我不知道的方法
使用这个
class LoadMovieTask(val ctx: MainActivity)
而不是
class LoadMovieTask(val ctx: Activity)
MainActivity 有方法而不是 Android 的 Activity class 本身。因此,即使您需要上下文,但由于您正在尝试访问特定于 MainActivity 的方法,因此需要传递
假设我有一个带有实例变量 loadedMovie 的 activity 和一个在另一个文件中执行 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?) {
....
}
}
问题是:我无法从 loadedMovie 修改 doInBackground(其中没问题,因为它在单独的线程上运行)和 onPostExecute(这不行)
我只是在 onPostExecute 中键入 ctx.loadedMovie 但它不在那里.. 也许我不明白什么?或者也许还有另一种我不知道的方法
使用这个
class LoadMovieTask(val ctx: MainActivity)
而不是
class LoadMovieTask(val ctx: Activity)
MainActivity 有方法而不是 Android 的 Activity class 本身。因此,即使您需要上下文,但由于您正在尝试访问特定于 MainActivity 的方法,因此需要传递