获取异步任务的结果

2023-12-24

我想从异步任务中获取结果。如果我使用task.execute.get,我的UI将被冻结。我希望我的异步任务是独立的类,所以我不想将结果处理代码放在 onPostExecute 中。我在这里找到了一些有关异步任务回调数据的信息:http://blog.evoxmusic.fr/content/how-implement-callback-asynctask http://blog.evoxmusic.fr/content/how-implement-callback-asynctask
和这里:android asynctask发送回调到ui https://stackoverflow.com/questions/9963691/android-asynctask-sending-callbacks-to-ui
但问题是: 1-我不知道什么时候处理结果? 2-为什么要使用接口? 3-使用接口与简单地将结果放入异步任务中 onPostExecute 的公共字段有什么区别?

这是我的异步类:

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

    private ProgressDialog dialog;
    public String methodName="";
    private WebService ws;
    private ArrayList<ServiceParam> paramsList;
    private boolean hasParams; 

    public AsyncCallWs(Activity activity,String methodName) {
        xLog.position();
        try {
            this.dialog = new ProgressDialog(activity);
            this.methodName = methodName;
            hasParams = false;
        } catch (Exception e) {
            xLog.error(e.getMessage());
        }
    }

    public AsyncCallWs(Activity activity,String methodName,ArrayList<ServiceParam> params) {
        xLog.position();
        try {
            this.dialog = new ProgressDialog(activity);
            this.methodName = methodName;
            this.paramsList = params;
            hasParams = true;
        } catch (Exception e) {
            xLog.error(e.getMessage());
        }
    }


    @Override
    protected void onPreExecute() {
        this.dialog.setMessage(PersianReshape.reshape("Loading..."));
        this.dialog.show();
    }

    @Override
    protected String doInBackground(String... params) {
        xLog.position();
        String result = "No async task result!";
        try {
            ws = new WebService(PublicVariable.NAMESPACE, PublicVariable.URL);
            if (!hasParams){
                result = ws.CallMethod(methodName);
            }
            else{
                xLog.info("THIS METHOD IS: "+ methodName);
                result = ws.CallMethod(methodName,paramsList);
                xLog.info("THIS RESULT IS: "+ result);
            }
        } catch (Exception e) {
            xLog.error(e.getMessage());
        }
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        xLog.position();

        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }
        xLog.info("Output of current AsyncTask is:"+ result);
    }
}

1-我不知道什么时候处理结果?

结果将被处理在onPostExecute,这反过来会在实现该接口的任何类中调用您的接口方法。所以实际的 UI 事情都会发生在你的Activity or Fragment或者任何实现接口回调的东西。您可以将任何您想要的数据传递给它。

2-为什么要使用接口?

接口是将逻辑与您的逻辑分离的好方法AsyncTask以及任何课程(我假设Activity or Fragment)正在实施它。这也意味着任何实现此接口的类都可以处理此接口的结果AsyncTask,它变得很容易重复使用。

3-使用接口与简单地将结果放入异步任务中 onPostExecute 的公共字段有什么区别?

您仍然不会收到回电 - 您将如何Activity or Fragment知道该字段何时被填充并准备好被询问吗?

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

获取异步任务的结果 的相关文章

随机推荐

  • Eclipse 中的“与编辑器链接”功能有什么作用?

    我是 Eclipse 新手 也不了解 NetBeans 我正在阅读 eclipse 教程 但我很困惑 无法理解 与编辑器链接 到底是做什么的 Eclipse gt 帮助中说 选择本地工具栏或其中之一的视图菜单中的 与编辑器链接 按钮 导航视
  • 套接字传递十六进制值

    我正在尝试将套接字中的字符串值传递到另一台服务器 另一个服务器应该接收十六进制格式的值 即 如果我的字符串在服务器上是 s 600185838e 它应该收到 60 01 85 83 8e 但是我发送的这些值已转换为 ASCII 并且不是所需
  • 将文本输入放在单选按钮的标签内?

    我正在尝试创建一个指定一堆选项的单选组 以及一个带有要指定的文本输入的额外选项 其他 我正在使用的这个特定单选按钮的代码是
  • 静态成员中的通用参数声明

    为什么不允许定义这样的静态成员 private static final
  • 再次针对特定异常启用中断

    我是 Visual Studio 的新手 我现在正在编程 当我在 Visual Studio 的调试器中启动程序时 一切正常 当我按下一个按钮时 它集中了我的代码并弹出一个框 带有指向有错误的行的箭头 说明错误是什么 但我取消选中了上面的检
  • go 中定期运行一个函数

    我有一个这样的函数 func run cmd string byte out err exec Command cmd Output if error nil log Fatal err return out 我想以这种方式运行这个命令 r
  • 将 2 个嵌套数组合并为一个具有多个值的数组

    我有 2 个这样的嵌套数组 array 1 0 gt array 1 id gt 6 1 gt array 1 id gt 4 array 1 0 gt array 1 id gt 509 1 gt array 1 id gt 256 我正
  • 如何修复预期响应包含数组但获得对象 ANGular js

    我是新人 在调用服务后使用资源模块很难得到这个错误 任何人都可以修改我在代码中出错的地方 或者只是修改其中需要纠正的部分 谢谢 即将到来的数据格式 brands Array 1 0 Object v 0 id 5251a4a34f232fc
  • 配置文件与 gcc/g++ 和 ld 的链接时间

    我正在使用 g 编译和链接一个由大约 15 个 c 源文件和 4 个共享对象文件组成的项目 最近 链接时间增加了一倍多 但我没有可用的 makefile 的历史记录 有没有办法分析 g 以查看链接的哪一部分花费了很长时间 Edit 当我注意
  • 如何确定 PHP 字符串是否仅包含纬度和经度

    我必须使用可能包含纬度 经度数据的字符串 如下所示 query 33 805789 151 002060 query 33 805789 151 002060 query OVER HERE 33 805789 151 002060 就我的
  • 保存片段状态操作栏选项卡

    我正在构建一个由带有选项卡的操作栏组成的应用程序 每个选项卡都包含一个片段 其中一个片段有需要加载的数据 所以我希望数据只在第一次加载 当用户更改选项卡并返回到包含该片段的选项卡时 不会等待再次加载数据 我假设我必须使用某种方式保存数据 以
  • Java中用外国字符替换英文字符的方法?

    在 PHP 中我会使用这个 text Je prends une th chaud s il vous pla t search array etc replace array e i e etc text str replace sear
  • 对于英语单词来说,什么是好的哈希函数?

    我有一长串英语单词 我想对它们进行哈希处理 什么是好的哈希函数 到目前为止 我的散列函数对字母的 ASCII 值求和 然后对表大小取模 我正在寻找有效且简单的东西 简单地对字母求和并不是一个好的策略 因为排列会给出相同的结果 这个 djb2
  • 如何在 MVC 中创建启动屏幕

    我想在单击保存按钮时创建一个启动屏幕 显示消息 您的数据正在保存 请稍候 我使用 MVC 5 进行开发 下面我创建了一个div div style margin 0px padding 0px width 100 height 100 ba
  • 我应该为我的个人项目使用软件托管解决方案吗?

    现在 我将所有项目都保存在笔记本电脑上 我认为我不应该这样做 而是使用版本控制系统并从外部托管存储库 Google Code SourceForge 等 将它们签入 签出 我在这里看到了几个好处 首先 如果我的计算机崩溃和烧毁或者我的外部硬
  • JavaScript 注释

    有 JavaScript 注释吗 当然 JavaScript 没有它们 但是是否有其他库或建议的语言扩展 例如 type folder otherjsmodule foo function foo folder otherjsmodule
  • 使用knockout js上传文件

    使用knockout js 无法上传文件 我尝试过下面的代码但不起作用 请指出我哪里做错了 这是我的文件控件和按钮 我无法将所选文件从客户端发送到服务器 请建议最好的方法是什么
  • 无法渲染动画

    我正在尝试学习如何使用 R 和 gganimate 获得漂亮的动画图形 但遇到了一些问题 当我尝试为图形设置动画时 R 似乎编辑了一些 PNG 文件 但随后无法渲染它们 这是我使用的代码示例 首先加载 tidyverse gganimate
  • 使用 jquery 切换显示\隐藏但具有多个 id

    我有一个 php 页面 它生成多个 UL 和每个 UL 上方的链接 如下所示 a title Category one Category one a ul li Subcategory li li li li Subcategory li
  • 获取异步任务的结果

    我想从异步任务中获取结果 如果我使用task execute get 我的UI将被冻结 我希望我的异步任务是独立的类 所以我不想将结果处理代码放在 onPostExecute 中 我在这里找到了一些有关异步任务回调数据的信息 http bl