从 AsyncTask 单独线程访问片段对象
Accessing fragment objects from AsyncTask separate thread
我正在从一个片段调用一个 asyncTask 来做一些网络。虽然它是 运行,但我需要能够禁用片段中的按钮,直到 AsyncTask 调用 onPostExecute。
我唯一的问题是我无法从 doInBackground 访问这样的按钮:
Button mButtom = mActivity.findViewById(R.id.testButton);
它得出:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: The current thread must have a looper!
要与 AsyncTask
中的 UI 交互,请覆盖 onPreExecute
、onPostExecute
和 onProgressUpdate
中的一个或多个。每当您在 doInBackground
中调用 publishProgress
时,都会调用后者。
我们有一个名为 runOnUIThread 的函数
@Override protected String doInBackground(String... strings) {
activity.runOnUiThread(new Runnable() {
@Override public void run() {
//do your action
}
});
return "";
}
我正在从一个片段调用一个 asyncTask 来做一些网络。虽然它是 运行,但我需要能够禁用片段中的按钮,直到 AsyncTask 调用 onPostExecute。
我唯一的问题是我无法从 doInBackground 访问这样的按钮:
Button mButtom = mActivity.findViewById(R.id.testButton);
它得出:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: The current thread must have a looper!
要与 AsyncTask
中的 UI 交互,请覆盖 onPreExecute
、onPostExecute
和 onProgressUpdate
中的一个或多个。每当您在 doInBackground
中调用 publishProgress
时,都会调用后者。
我们有一个名为 runOnUIThread 的函数
@Override protected String doInBackground(String... strings) {
activity.runOnUiThread(new Runnable() {
@Override public void run() {
//do your action
}
});
return "";
}