【问题标题】:Grab return value of asynctask? [closed]获取异步任务的返回值? [关闭]
【发布时间】:2014-05-20 09:55:25
【问题描述】:

是否可以获取doInBackground()方法的返回值?

JSONArray response = new SupportFunctions.executeURLWithResponse().execute(url);

它告诉我:

Description Resource    Path    Location    Type
Type mismatch: cannot convert from AsyncTask<String,Void,JSONArray> to JSONArray          ContactFunctions.java /BuddyCheck/src/com/pthuermer/buddycheck    line 138    Java Problem

这样的?

【问题讨论】:

  • 您尝试阅读文档了吗?
  • 如果任务在单独的文件中,您可以使用interfaceHere is an example 否则可以更新值或调用函数来设置onPostExecute()中的值
  • codeMagic是对的,你需要@Overridevoid onPostExecute(Result result)
  • 然后呢?结果在哪里?我不能从 onPostExecute 中返回一些东西,对吧?
  • 查看我关于使用界面的链接答案

标签: android android-asynctask return


【解决方案1】:

您可以响应类或全局变量,然后在异步任务完成时设置变量。你应该做的大部分事情应该在你的 onPostExecute 覆盖中。

Get returned JSON from AsyncTask

【讨论】:

    【解决方案2】:

    是否可以获取doInBackground()方法的返回值?

    不是你尝试的方式。

    有一个get() 方法可以调用来阻塞当前线程并等待异步工作完成。这通常不是您想要的——您特别想要异步完成工作(否则,为什么要有AsyncTask?)。

    将需要 JSONArray 响应的代码移动到 onPostExecute() 本身或将由 onPostExecute() 执行的其他方法中。

    【讨论】:

    • 我使用 asynctask 是因为它是从 URL 获取 JSON 响应的唯一方法,对吧?
    • @user3432220 不。您需要(应该)在后台线程上执行此操作,但这并不意味着您必须使用AsyncTask,尽管它通常用于此类事情。你应该阅读线程herehere
    • @user3432220:您需要使用后台线程“从 URL 获取 JSON 响应”。 AsyncTask 是后台线程的包装器。但是您需要后台线程的原因是您不会占用等待网络 I/O 的主应用程序线程。在onPostExecute() 中处理AsyncTask 后台工作的结果——这就是它存在的原因。
    • 从后台线程获取jsonarray响应会更容易吗?
    • @user3432220 您正在使用后台线程。这就是doInBackground()AsyncTask 类也有更新 Ui 的方法。
    猜你喜欢
    • 2021-04-04
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2017-08-07
    • 2015-01-12
    • 2014-10-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多