首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AsyncTask返回对象困难

AsyncTask返回对象困难
EN

Stack Overflow用户
提问于 2018-07-18 02:29:31
回答 4查看 62关注 0票数 0

我试图使用AsyncTask进行API调用,并将响应映射到我命名为MapInfo的对象,该对象是MainActivity中的一个变量。然后,我使用这个MapInfo的字段,名为polyline,并使用预先构建的URL编码器在另一个API调用中使用。我遇到的问题是,AsyncTaskPostExecute()中返回MapInfo对象,但是MainActivity上的代码继续执行,我需要先返回MapInfo对象,然后再继续执行代码。

这是在MainActivity中:

代码语言:javascript
运行
复制
public static MapInfo mapInfo = new MapInfo();

OnCreate() {

    button.setonClick() {

    //some stuff
    new AsyncTask blah = blahblah.execute("");
    //the above returns a singular MapInfo object and assigns it to mapInfo
    String polyline = mapInfo.polyline; //<--This is where the issue is. 
    }
}

为null,它用于进一步向下的API调用中。在将polyline分配给返回的对象之前,我应该如何“等待”AsyncTask完成呢?

注意事项:上面的块是伪代码。

编辑

我在post执行中分配了一个字符串,poly,但是仍然发生了相同的错误。我所做的不仅仅是使用MainActivty中的字符串多边形,而是使用MainActivity中返回的MapInfo对象分配TextViews,然后在不同的API调用中使用polyline下载图像。我是否应该从AsyncTask更改为API调用,因为我只需要来自整个JSONobject的4个字段

红色箭头试图在MainActivity中赋值。

蓝色箭头试图在OnPostExecute中赋值。

来自Android的snip单击ME

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-18 06:13:48

AsyncTask在异步执行的后台线程中执行任务。在任务执行之后获得结果的两种方法:

  1. 使用blahblah.execute("");并在onPostExecute中获取结果 @重写受保护的void onPostExecute(MapInfo mapInfo) { super.onPostExecute(mapInfo);字符串polyline = mapInfo.polyline;}
  2. 使用类似 MapInfo mapInfo = blahblah.execute("").get();String polyline = mapInfo.polyline; 这样就不需要捕获onPostExecute(-)
票数 1
EN

Stack Overflow用户

发布于 2018-07-18 02:32:47

AsyncTask将在异步执行的后台线程中执行任务。将String polyline = mapInfo.polyline;放在new AsyncTask blah = blahblah.execute("");后面将立即执行,因为控件将触发AsyncTask并继续执行下一个语句

如果在执行任务后需要执行String polyline = mapInfo.polyline;,那么将其放在onPostExecute()中,如下所示:

代码语言:javascript
运行
复制
@Override
protected void onPostExecute(final MapInfo mapInfo) {
   super.onPostExecute(mapInfo);
   ...
   final String polyline = mapInfo.polyline;
}
票数 1
EN

Stack Overflow用户

发布于 2018-07-18 05:40:18

您不应该将AsyncTask用于API调用,因为API服务(Retrofit、Volley等)已经在后台线程中工作。

由于AsyncTask和API调用服务在不同的线程中工作,因此数据不会相应更新。

相反,您应该使用API的方法onSuccess方法在MainActivity中设置结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51392721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档