android - 从 AsyncTask 单独线程访问片段对象
问题描述
我正在从片段中调用 asyncTask 来进行一些网络连接。在它运行时,我需要能够禁用片段中的按钮,直到 AsyncTask 调用 onPostExecute。
我唯一的问题是我无法从 doInBackground 访问这样的按钮:
Button mButtom = mActivity.findViewById(R.id.testButton);
它提出了:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.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$1.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!
解决方案
我们有一个名为 runOnUIThread 的函数
@Override protected String doInBackground(String... strings) {
activity.runOnUiThread(new Runnable() {
@Override public void run() {
//do your action
}
});
return "";
}
推荐阅读
- php - 带有 PHP SDK 的 Facebook JavaScript 助手突然停止工作
- javascript - 使用 Google 反向地理编码的 400 错误请求
- visual-studio-code - 在 WSL 中运行 vscode 会引发 v8 二进制文件和快照之间的致命错误版本不匹配
- graphql - Keystone.JS API 用户认证(不是 Admin-UI)
- android - 如何将 Workmanager 任务完成通知服务?
- sql - 将表达式转换为数据类型日期时间的算术溢出错误
- selenium - 如何在 Cucumber+Selenium+Java 中实现 ITestListener
- amazon-web-services - 禁用 Cloudfront 以缓存特定路径
- firebase - 检测身份验证凭据是否已在 Firebase 中链接
- css - 卡内的 TableCell 文本在 React 中溢出