Android 通用 AsyncTask 类

2024-03-28

我看过这个答案:由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主活动? https://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a

但这不是我要问的,因为我的调用类有多个调用AsyncTask.

我想创建一个通用的AsyncTask类将接受 URL 并从给定 URL 下载内容并返回下载的内容。

Example:

public class MyAsyncTask extends AsyncTask<String, Void, String>{
    ProgressDialog dialog;

    protected void onPreExecute() {
        super.onPreExecute();
        dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
    }

    protected String doInBackground(String... params) {
        // do download here
    }

    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        dialog.dismiss();
    }
}

我还有另一个班级称之为AsyncTask在不同场景下

public class MyClass {

    public method1(String url) {
        String result = new MyAsyncTask().execute(url).get();
    }

    public method2(String url) {
        String result = new MyAsyncTask().execute(url).get();
    }
}

我知道使用get()方法将使整个过程成为同步任务。但我想将结果返回给调用类。我也知道,为了防止这种情况,我必须实现一个接口。但由于我在同一个班级中有多个电话,这是不可能的。那么有人可以给我一个解决这个问题的想法吗?


As doInBackground在后台工作,从活动调用时,您无法获取其返回值的结果。

您需要设置一个回调,该回调将随结果一起调用。

For ex:

interface Callback{
void onResult(String result);
}

让你的活动实现这个并在活动中

void onResult(String result){
    //Do something
}

现在将您的 asyncTask 更改为:

public class MyAsyncTask extends AsyncTask<String, Void, String>{

   ProgressDialog dialog;
   Callback callback;
public MyAsyncTask(Callback callback){
 this.callback=callback;
}
protected void onPreExecute() {
    super.onPreExecute();
    dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
}

protected String doInBackground(String... params) {
    //do download here
}

protected void onPostExecute(String result) {
    super.onPostExecute(result);
    callback.onResult(result);
    dialog.dismiss();
}
} 

从活动开始此任务时:

 new MyAsyncTask(new Callback{
void onResult(String result){ 
 //Do something
}
}).execute(url);

所以当你收到回复时onResult会被叫到

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 通用 AsyncTask 类 的相关文章

  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • 如何查看Android Asset资源?

    我想检查 assets 文件夹中是否存在文件 我怎样才能做到呢 请帮忙 我向我的应用程序类之一添加了一个辅助方法 我假设 应用程序运行时 资产列表不会更改 the List
  • 使用 Asp.Net 的 GCM 推送通知

    正如您可能已经看到的 Google 正在迁移其推送通知系统 http developer android com guide google gcm c2dm html http developer android com guide goo
  • 即使获得平台签名也无法读取系统文件

    我已经构建了一个自定义 Android ROM 我已经使用平台签名签署了我的应用程序并添加了android sharedUserId android uid system 在清单文件中 我的应用程序被授予所有 签名 和 系统 级别权限 但不
  • Android 设备 ID(不是 IMEI)

    我使用命令 adb devices 列出连接的设备 在我的电脑上我得到 附加设备列表 HT9CTP820988 器件 我的问题是 如何以编程方式获取此 id HT9CTP820988 你所看到的adb devices命令是序列号 序列号 创
  • 如何使用 Java 原生接口从 Java 调用 Go 函数?

    可以通过以下方式调用 C 方法JNA https en wikipedia org wiki Java Native AccessJava 中的接口 如何使用 Go 实现相同的功能 package main import fmt impor
  • android studio logcat 中字母的含义是什么? [复制]

    这个问题在这里已经有答案了 在 android studio 中运行应用程序时 会生成 logcat 并且每行的开头都有字母 这些字母的含义是什么 这些字母表用于各种日志选项 请参阅此链接 日志选项 https developer andr
  • 如何增加颤振中切屑的宽度

    我想增加宽度Chip 我怎样才能实现这个目标 Chip elevation 6 0 backgroundColor Colors white shape RoundedRectangleBorder borderRadius BorderR
  • 源服务器未找到目标资源的当前表示或不愿意透露该表示存在

    web xml
  • java 属性文件作为枚举

    是否可以将属性文件转换为枚举 我有一个包含很多设置的属性文件 例如 equipment height equipment widht equipment depth and many more like this and not all a
  • Android Lollipop BLE 扫描 - 获取没有重复的外设

    Android Lollipop 引入了一种扫描 BLE 外设的新方法 通过蓝牙扫描仪 http developer android com reference android bluetooth le BluetoothLeScanner
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 通用 JSF 实体转换器[重复]

    这个问题在这里已经有答案了 我正在编写我的第一个 Java EE 6 Web 应用程序作为学习练习 我没有使用框架 只是使用 JPA 2 0 EJB 3 1 和 JSF 2 0 我有一个自定义转换器 用于将存储在 SelectOne 组件中
  • 如何在 Fragment 中使用 onNewIntent(Intent Intent) 方法?

    我正在尝试从我的设备使用 NFC 硬件 但是 问题是当我注册 Activity 来接收 Intent 时 PendingIntent pendingIntent PendingIntent getActivity this 0 new In
  • 为什么在回收器视图中滚动后值会消失?

    Data before scrolling Data after scrolling 我的应用程序的问题如上图所示 输入数据后 如果我在将项目添加为可滚动后滚动 数据就会消失 作为进一步的解释 有时输入的数据出现在已添加的其他项目中 为了解
  • 字节码和位码有什么区别[重复]

    这个问题在这里已经有答案了 可能的重复 LLVM 和 java 字节码有什么区别 https stackoverflow com questions 454720 what are the differences between llvm
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • 如何自动更新Android Studio?

    我需要将 Android Studio 更新到 0 9 9 版本 但是当我按 下载 在更新信息对话框上 时 它会将我发送到此处 http developer android com sdk index html http developer
  • Java 9 中紧凑字符串和压缩字符串的区别

    有什么优点紧凑的字符串 http openjdk java net jeps 254JDK9 中的压缩字符串 压缩字符串 Java 6 和紧凑字符串 Java 9 都有相同的动机 字符串通常实际上是 Latin 1 因此浪费了一半的空间 和

随机推荐

  • 复制文件名中带有方括号 [ ] 的文件并使用 * 通配符

    我在 Windows 7 上使用 PowerShell 并编写一个脚本将一堆文件从一个文件夹结构复制到另一个文件夹结构 有点像编译 PowerShellCopy Itemcmdlet 认为方括号 是某种通配符 并且由于某种原因我无法转义它们
  • 超正方错误 - 图像太大

    对于大小为 5 MB 的图像 我从 tesseract 收到以下错误 Tesseract 开源 OCR 引擎 v3 01 与 Leptonica 第0页 图片太大 39667 56133 处理过程中出错 文件大小是否有限制 或者是否有参数可
  • 使用 CSS 渐变时添加图像?

    我正在尝试使用 CSS 渐变以及渐变顶部的图标创建一个按钮 我尝试了两种方法 但都失败了 First btn background webkit gradient linear 0 0 0 89 from 3171CA to 15396F
  • Wavesurfer.js 工作正常,但react-wavesurfer 有问题

    我在使用 Wavesurfer 的网络项目中遇到了障碍 我已经在我的项目中安装了wavesurfer js 和react wavesurfer 作为节点模块 Wavesurfer js 似乎工作正常 但 React wavesurfer 似
  • 两遍连接组件,组件数量问题

    两遍连通分量算法正在检测一幅图像中的单独分量 每次检测后我都会保存每个component作为不同的图像 要显示每个component在单独的图像上 我使用多个 if 条件 但是这些if conditions每当图像中每个组件都有很多形状时
  • 为什么调用函数时要使用“go”关键字?

    我正在查看 TCP 服务器的示例 他们定义了一个函数并用以下方式调用它 go handleRequest conn 我觉得看到这个很奇怪go关键字 所以我尝试了没有 handleRequest conn 令我惊讶的是 这有效 如果两者的工作
  • Sphinx警告预加载:无法打开

    我安装了sphinx搜索服务 为了创建索引 我使用下一个命令 sudo searchd c etc sphinxsearch sphinx conf 在终端中收到警告消息后 使用配置文件 etc sphinxsearch sphinx co
  • 十月 CMS:无法创建表单小部件

    我是 October CMS 的新手 正在学习创建表单小部件 但我收到以下错误 The partial field actorbox htm is not found opt lampp htdocs octobermovies modul
  • UIDynamicItem 手动更新转换

    我知道外部变化center bounds and transform之后将被忽略UIDynamicItems init 但我需要手动更改transform of UIView在UIDynamicAnimator system 每次我改变tr
  • 通过 for-compression 线程“Try”

    触发于另一个问题 https stackoverflow com revisions 5cbd16fb 14e0 4870 aae7 b140601b1e3e view source 不过后来被编辑掉了 我想尝试一下链接调用 Scala 2
  • 使用 ETW 记录异常的最佳方法是什么?

    是否有使用 ETW 记录异常的标准方法 据我所知 执行此操作的唯一方法是记录消息以及可能的内部异常消息 因为异常类型没有强类型参数 当启用时 所有 CLR 异常 第一次机会以及可能最终导致应用程序崩溃的异常 都会由 CLR 运行时提供程序记
  • nfq_get_payload 如何构造其返回数据?

    首先 我尝试从 Netfilter 队列有效负载的有效负载中获取源地址和目标端口 使用 nfq get payload 函数检索有效负载 下面的问题提出了同样的问题并得到了正确的答案 如何从 iptables 队列中的数据包中提取源端口号和
  • 将自动增量限制在特定范围内

    我正在尝试创建一个工作应用程序 该应用程序将在内部使用 并允许我们为我们的产品 SKU 分配一些条形码编号 我使用 Visual Studio Basic 2010 Express 来构建这个 因为我使用 VS 2010 Express 的
  • svn结帐深度

    我有一个 SVN 项目 其树如下 project dir1 subdir1 file1 file2 file1 file2 dir2 file1 file2 dir3 subdir1 file1 file2 subdir2 file1 fi
  • 字体大小 <12px 在 Google Chrome 中无效

    css font size 我应该怎么办 我的 Google Chrome 浏览器使用默认设置 我的版本是4 0 249 89 我使用的是Windows XP 您可以将以下代码粘贴到 Google Chrome 中进行测试 p style
  • 为什么 IE11 在 ajax 请求的请求标头中发送“pragma: no-cache”?

    我正在 IE11 上测试我的网页 我正在进行一些 ajax 调用并将响应标头设置为 Cache Control private max age 21600 虽然每次发出请求时 IE11都会设置Pragma no cache请求标头 导致请求
  • 为什么 Jersey/JAX-RS 客户端无法处理泛型?

    我有一个 Jersey JAX RS 客户端 它使用 RESTful API JSON 该 API 应该返回我的 POJO 列表 Hits GET localhost 8080 myapp fizz widget widget id Ove
  • 我可以在没有自己的后端服务器的情况下在 React 中实现 Stripe checkout 吗?

    我在 Netlify 上部署了一个 React 前端 我想实现一个简单的支付系统 用户可以输入他们想要的金额并使用 Stripe 结帐甚至 PayPal 进行支付 我想知道这是否可以在不支付单独后端费用的情况下实现 或者您可以建议其他任何自
  • 如何使用 jquery 追加整个 html 文件

    我有一个像这样的html文件 some content some content 我的问题是如何使用 jquery 加载这个文件作为一个整体 我尝试过 我搜索了很长一段时间的解决方案 但只找到了很多方法来附加html文件的某些部分 例如元
  • Android 通用 AsyncTask 类

    我看过这个答案 由于 AsyncTask 是一个单独的类 如何将 OnPostExecute 的结果获取到主活动 https stackoverflow com questions 12575068 how to get the resul