我试图使用AsyncTask进行API调用,并将响应映射到我命名为MapInfo的对象,该对象是MainActivity中的一个变量。然后,我使用这个MapInfo的字段,名为polyline,并使用预先构建的URL编码器在另一个API调用中使用。我遇到的问题是,AsyncTask在PostExecute()中返回MapInfo对象,但是MainActivity上的代码继续执行,我需要先返回MapInfo对象,然后再继续执行代码。
这是在MainActivity中:
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中赋值。
发布于 2018-07-18 06:13:48
AsyncTask在异步执行的后台线程中执行任务。在任务执行之后获得结果的两种方法:
blahblah.execute("");并在onPostExecute中获取结果
@重写受保护的void onPostExecute(MapInfo mapInfo) { super.onPostExecute(mapInfo);字符串polyline = mapInfo.polyline;}
或发布于 2018-07-18 02:32:47
AsyncTask将在异步执行的后台线程中执行任务。将String polyline = mapInfo.polyline;放在new AsyncTask blah = blahblah.execute("");后面将立即执行,因为控件将触发AsyncTask并继续执行下一个语句
如果在执行任务后需要执行String polyline = mapInfo.polyline;,那么将其放在onPostExecute()中,如下所示:
@Override
protected void onPostExecute(final MapInfo mapInfo) {
super.onPostExecute(mapInfo);
...
final String polyline = mapInfo.polyline;
}发布于 2018-07-18 05:40:18
您不应该将AsyncTask用于API调用,因为API服务(Retrofit、Volley等)已经在后台线程中工作。
由于AsyncTask和API调用服务在不同的线程中工作,因此数据不会相应更新。
相反,您应该使用API的方法onSuccess方法在MainActivity中设置结果。
https://stackoverflow.com/questions/51392721
复制相似问题