Android 在 AsyncTask onPostExecute 中使用接口返回值[重复]

2023-12-22

在下面的代码中我想返回值AsyncTask使用接口。但我得到了错误的值,并且无法返回正确的值onPostExecute.

我开发了这个link https://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a教程与我的代码。我无法正确使用它。

界面:

public interface AsyncResponse {
    void processFinish(String output);
}

Ksoap主要类别:

public class WSDLHelper  implements AsyncResponse{
    public SoapObject request;

    private String Mainresult;

    public String call(SoapObject rq){

        ProcessTask p =new ProcessTask(rq);
        String tmp = String.valueOf(p.execute());

        p.delegate = this;

        return Mainresult;
    }


    @Override
    public void processFinish(String output) {

        this.Mainresult = output;
    }
}
class ProcessTask extends AsyncTask<Void, Void, Void > {
    public AsyncResponse delegate=null;

    SoapObject req1;
    private String result;
    public ProcessTask(SoapObject rq) {
        req1 = rq;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(this.req1);

        AndroidHttpTransport transport = new AndroidHttpTransport(Strings.URL_TSMS);
        transport.debug = true;

        try {
            transport.call(Strings.URL_TSMS + this.req1.getName(), envelope);
            this.result = envelope.getResponse().toString();
        } catch (IOException ex) {
            Log.e("" , ex.getMessage());
        } catch (XmlPullParserException ex) {
            Log.e("" , ex.getMessage());
        }

        if (result.equals(String.valueOf(Integers.CODE_USER_PASS_FALSE))) {
            try {
                throw new TException(PublicErrorList.USERNAME_PASSWORD_ERROR);
            } catch (TException e) {
                e.printStackTrace();
            }

        }

        Log.e("------------++++++++++++++++-----------", this.result);

        return null;
    }

    protected void onPostExecute(String result) {
    /* super.onPostExecute(result);*/
        delegate.processFinish(this.result);
    }

}

请帮我解决这个问题


那是行不通的。您正在创建并执行 AsyncTask(异步!),然后在尚未收到结果时调用 return Mainresult(同步!)。解决办法是去掉多余的类WSDLHelper,直接访问ProcessTask

除此之外,您错误地使用了 AsyncTask(将结果保存在类变量中,而不是将其作为参数传递)。这是完整版本:

public class ProcessTask extends AsyncTask<Void, Void, String> {
public AsyncResponse delegate=null;

SoapObject req1;

public ProcessTask(SoapObject rq, AsyncResponse delegate) {
    req1 = rq;
    this.delegate = delegate;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected Void doInBackground(Void... params) {

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(this.req1);

    AndroidHttpTransport transport = new AndroidHttpTransport(Strings.URL_TSMS);
    transport.debug = true;

    String result = null;
    try {
        transport.call(Strings.URL_TSMS + this.req1.getName(), envelope);
        result = envelope.getResponse().toString();
    } catch (IOException ex) {
        Log.e("" , ex.getMessage());
    } catch (XmlPullParserException ex) {
        Log.e("" , ex.getMessage());
    }

    if (result != null && result.equals(String.valueOf(Integers.CODE_USER_PASS_FALSE))) {
        try {
            throw new TException(PublicErrorList.USERNAME_PASSWORD_ERROR);
        } catch (TException e) {
            e.printStackTrace();
        }

    }

    Log.e("------------++++++++++++++++-----------", result);

    return result;
}

protected void onPostExecute(String result) {
/* super.onPostExecute(result);*/
    delegate.processFinish(result);
}

}

现在您可以像这样从外部执行 ProcessTask,这将确保您异步接收结果:

new ProcessTask(rq, new AsyncResponse() {
    @Override
    public void processFinish(String output) {
        // do whatever you want with the result
    }
}).execute();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 在 AsyncTask onPostExecute 中使用接口返回值[重复] 的相关文章

  • 如何将点击侦听器添加到 Android/Java Textview 中的字符串中?

    我想要完成的是大多数 Twitter 应用程序中的标准操作 在文本视图中 文本字符串中的单词前面可能有 提及或 主题标签 并且它们实际上能够添加点击侦听器这个词启动了另一项活动 有谁知道这是如何实现的 下面我附上了一张示例照片 显示了我想要
  • Java J文件选择器

    我希望能够控制外观JFileChooser 我特别想保存如何JFileChooser上次显示时显示 我想保存它是否在详细信息 列表视图中使用以及列表被排序的列 例如 大小或修改日期 我知道有很多关于JFileChooser但我一直没能找到我
  • 无法将图像从 url 存储到 SD 卡

    我想将图像存储在 mnt sdcard 中 package com Downld file frm net import java io BufferedInputStream import java io File import java
  • 如何使用 Android Volley API?

    我正在考虑在我的下一个项目中实现 Android Volley 库 关于 Volley 的 Google IO 演示 http www youtube com watch v yhv8l9F44qo 但是 我还没有找到该库的任何重要的 AP
  • 是否可以自定义首选项标题布局?

    我发现了类似的问题 但找不到最新的具体答案 我在用着
  • Android AsyncTask 第二次调用时未执行

    我有一个扩展 AsyncTask 的类 public class SendJSONArray2Server extends AsyncTask
  • 检查对象是否为空

    我有一个链表 其中第一个节点包含空对象 表示firstNode data等于null firstNode nextPointer null firstNode previousPointer null 我想检查firstNode 是否为空
  • Spring Boot - 如何在开发过程中禁用@Cacheable?

    我正在寻找两件事 如何在开发过程中使用 Spring boot dev 配置文件禁用所有缓存 application properties 中似乎没有通用设置可以将其全部关闭 最简单的方法是什么 如何禁用特定方法的缓存 我尝试像这样使用 S
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • Android 应用程序中通过 VideoView 将正在播放的视频静音

    我想在我的 Android 应用程序中将 VideoView 正在播放的视频静音 我在 VideoView 类中找不到任何方法来执行此操作 知道如何做到这一点吗 我在 MediaPlayer 类中找到了一个方法 setVolume 但我无法
  • 抛出 UnsupportedOperationException

    因此其中一种方法的描述如下 public BasicLinkedList addToFront T data 该操作无效 对于排序列表 将生成 UnsupportedOperationException 使用消息 排序列表的操作无效 我的代
  • MediaPlayer() 音频口吃(android)

    我正在我的 Android 应用程序中使用 MediaPlayer 函数从远程服务器传输实时音频流 但音频断断续续且断断续续 问题不在于我的互联网 因为当我在计算机上播放时 提要播放得很好 可能是什么问题 注意 直播正在进行中 这是我正在使
  • 当 SystemUI 在 Android Boot 中加载时

    如何知道系统 UI 何时加载Android启动过程 状态栏和导航栏视图到底绘制在哪里 作为SystemUI是一个特权应用程序 那么它是否在启动器应用程序 主屏幕 启动之前加载 我不知道 欢迎任何建议 下面是一系列简要解释的步骤 希望能够阐明
  • Android 依赖项 com.google.firebase:firebase-core 编译 (12.0.1) 和运行时 (11.4.2) 的版本不同

    这是我的项目 Gradle 依赖项 classpath com android tools build gradle 3 1 0 classpath com google gms google services 3 0 0 classpat
  • 获取 Blob 图像并将该图像转换为 Bitmap 图像

    我正在从数据库中获取 blob 格式的图像 我想将其转换为位图图像 我用来将位图转换为 Blob 的代码放在下面 但是请告诉我如何反转它 ByteArrayOutputStream boas new ByteArrayOutputStrea
  • FocusEvent 没有获取 JFormattedTextField 的最后一个值,我如何获取它?

    我有两个JFormattedTextField我的物体JFrame目的 我想要通过这些值进行基本数学 加法 JFormattedTextField对象 我希望当焦点丢失第一个或第二个文本字段时发生这种情况 但当 focusLost 事件没有
  • 如何为用户的活动设置计时器?

    如果用户在 5 小时内停止工作 我需要执行特定的方法 假设用户已登录 但他在 5 小时内没有向数据库的特定表添加任何记录 任何时候用户将记录添加到指定的表中 该特定用户的计时器都应该重置 否则它将继续运行 如果达到 5 小时 应用程序应显示
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • eclipse.ui.menus 的名称过滤器

    我有一个菜单贡献 通过实现org eclipse ui menus扩展点 我想仅为特定文件扩展名 例如 pld 提供此菜单贡献 但我不知道如何使用 visibleWhen 来做到这一点 有任何想法吗 更新 到目前为止我的扩展点

随机推荐

  • 两个 无间距

  • 在 mac osx 11.6 上安装 ruby​​ 2.6.x 和 3.0.x 时 ruby​​-install 失败

    运行 ruby install 时 构建失败 rbenv 问题中也报告了这一点 https github com rbenv ruby build issues 1725 https github com rbenv ruby build
  • 使用 AJAX 在 Rails 中自动保存表单

    我正在尝试为 Post new 操作自动保存表单 每隔一分钟左右 我想 POST 到 Post autosave 然后检查first or create 并保存 更新 Posts 表中的记录 但我的问题是 我无法再从表单访问 POST 参数
  • 在视频视图中播放 YouTube 视频

    在我的应用程序中 我有一个视频视图 我想在其中播放 YouTube 视频 为此 我尝试了很多方法 例如 VideoView mVideoView new VideoView this setContentView mVideoView mV
  • C++中的“new”运算符,指针问题

    愚蠢的问题 但是每当你调用 new 时 你总是有一个指针吗 SomeClass person new SomeClass 这是因为您需要一个指针来指向为 SomeClass 变量 person 分配的新内存空间吗 谢谢 If new成功完成
  • kml 谷歌扩展不在模式中

    我居住的司法管辖区使用谷歌地球发布了数据 他们指向的kml文件包含
  • 张量流图构造中没有形状错误,但在图计算过程中出现形状不匹配错误

    张量流图构造没有出现错误 但在图计算过程中出现形状不匹配错误tf gradients 我猜错误是在反向传播中 这是我得到的错误 InvalidArgumentError 请参阅上面的回溯 reshape 的输入是一个具有 16777216
  • Anaconda Prompt 不会启动 _NamespacePath

    我有一个奇怪的错误 我找不到解决方案 每次启动 Anaconda Prompt 运行 Windows 10 时 我都会在底部收到以下错误 即使我尝试使用 conda 我也会收到相同的错误 在安装信息之后 我尝试卸载并重新安装 Anacond
  • CSharpCodeProvider 似乎停留在 .NET 2.0,如何获得新功能?

    我有以下相当标准的代码作为包装器CSharpCodeProvider 这个类工作得很好 并且执行得很好等等 但是 尽管我的应用程序是针对 NET 3 5 构建的 并且在进行此编译时引用了 v3 5 程序集 但我仍然无法访问任何额外好的 C
  • 使用 rustc 和 clang 运行 LLVM 文件

    我正在尝试运行 ll文件带有 clang 并出现链接器错误 我有一个文件test rs它只包含一个 main 函数println 陈述 我使用以下命令生成 LLVM IRrustc emit llvm ir crate type bin t
  • 用于字符串插值的 Swift 协议

    我必须实现什么协议来控制 Swift 中字符串插值中对象的表示方式 我不想指定打印的内容 如下所示 struct A var a A println a 您需要实施Printable协议 该协议应该被那些希望定制自己的类型的类型所采用 文本
  • 为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?

    我的 vStack 滚动视图在没有 GeometryReader 的情况下也能工作 在 AppleTV 中 我没有在 iOS 中进行测试 然后我添加了几何读取器 VStack 像 ZStack 一样 折叠 我能做什么来解决这个问题 是的 我
  • ASP.NET MVC 站点地图和/或安全调整

    ASP NET MVC 中是否有与 Web 表单中的 SiteMap 和安全调整功能等效的功能 我刚刚开始学习 MVC 一直在寻找解决方案 以防止在学习时走上错误的道路 Check ASP NET MVC 站点地图提供程序 https gi
  • 将 Param 与参数数组绑定

    我有一个函数可以执行此操作 function registerUser firstName lastName address postcode email password params array firstName lastName a
  • Oracle 中触发器无效

    在对表进行某些更改后 我的数据库中的某些触发器变得无效 但他们似乎仍在工作 我遇到的唯一问题是 如果我使用 SQL Developer 触发器的左侧会出现红叉 表明它们无效 这是一个大问题吗 我知道我可以重新编译触发器来解决这个问题 但我不
  • 为什么我的许可证没有显示?

    In my
  • Asp.Net MVC 验证 - 依赖字段

    我目前正在尝试进行 MVC 验证 并且遇到了一些问题 其中需要一个字段 具体取决于另一个字段的值 下面是一个例子 我还没弄清楚 如果 PaymentMethod Cheque 那么 ChequeName 应该是必需的 否则可以通过 Requ
  • NSMutableArray 线程安全

    在我的应用程序中 我正在从多个线程访问和更改可变数组 一开始 当我尝试使用以下命令访问对象时 它崩溃了objectAtIndex 因为索引超出范围 该索引处的对象已从另一个线程的数组中删除 我在网上搜索了如何解决这个问题 我决定尝试这个so
  • facebook c# sdk - 用户尚未授权应用程序执行此操作

    我正在构建一个控制台应用程序 它将将流发布到页面墙上 问题 我收到 用户尚未授权应用程序执行此操作 我正在使用 opengraph 来获取访问令牌 我错过了什么吗 任何帮助是极大的赞赏 谢谢 constants string apiKey
  • Android 在 AsyncTask onPostExecute 中使用接口返回值[重复]

    这个问题在这里已经有答案了 在下面的代码中我想返回值AsyncTask使用接口 但我得到了错误的值 并且无法返回正确的值onPostExecute 我开发了这个link https stackoverflow com questions 1