为了账号安全,请及时绑定邮箱和手机立即绑定

AsyncTask 返回对象困难 Android Studio

AsyncTask 返回对象困难 Android Studio

守候你守候我 2021-05-31 16:21:34
我正在尝试使用 anAsyncTask进行 API 调用并将响应映射到我命名的对象MapInfo,该对象是MainActivity. 然后,我使用MapInfo名为 polyline 的this字段,并使用预构建的 URL 编码器在不同的 API 调用中使用。我遇到的问题是,我在 中AsyncTask返回了MapInfo对象PostExecute(),但是 上的代码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.     }}字符串折线为空,在 API 调用中进一步使用。AsyncTask在将折线分配给返回的对象之前,我应该如何“等待”完成?
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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


blahblah.execute(""); 在 onPostExecute 中使用并获取结果


@Override

protected void onPostExecute(MapInfo mapInfo) {

   super.onPostExecute(mapInfo);

   String polyline = mapInfo.polyline;

}

或者


使用喜欢


MapInfo mapInfo = blahblah.execute("").get();

String polyline = mapInfo.polyline;

这样就不需要在 onPostExecute(-) 中捕获结果


查看完整回答
反对 回复 2021-06-02
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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;

}


查看完整回答
反对 回复 2021-06-02
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您不应该使用AsyncTaskAPI 调用,因为 API 服务(Retrofit、Volley 等)已经在后台线程中运行。

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

相反,您应该使用onSuccessAPI的方法方法在MainActivity


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信