猿问

AsyncTask 返回对象困难 Android Studio

我正在尝试使用 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在将折线分配给返回的对象之前,我应该如何“等待”完成?


守候你守候我
浏览 201回答 3
3回答

慕的地10843

AsyncTask在异步执行的后台线程中执行任务。任务执行后获取结果的两种方式:blahblah.execute(""); 在 onPostExecute 中使用并获取结果@Overrideprotected void onPostExecute(MapInfo mapInfo) {&nbsp; &nbsp;super.onPostExecute(mapInfo);&nbsp; &nbsp;String polyline = mapInfo.polyline;}或者使用喜欢MapInfo mapInfo = blahblah.execute("").get();String polyline = mapInfo.polyline;这样就不需要在 onPostExecute(-) 中捕获结果

慕哥6287543

AsyncTask将在异步执行的后台线程中执行任务。配售String polyline = mapInfo.polyline;后,立即new AsyncTask blah = blahblah.execute("");将立即执行,因为控制会触发AsyncTask并继续执行下一个语句如果需要String polyline = mapInfo.polyline;在任务执行后执行onPostExecute(),则按如下方式放置:@Overrideprotected void onPostExecute(final MapInfo mapInfo) {&nbsp; &nbsp;super.onPostExecute(mapInfo);&nbsp; &nbsp;...&nbsp; &nbsp;final String polyline = mapInfo.polyline;}

慕桂英546537

您不应该使用AsyncTaskAPI 调用,因为 API 服务(Retrofit、Volley 等)已经在后台线程中运行。由于AsyncTaskAPI 调用服务在不同的线程中工作,因此数据不会相应地更新。相反,您应该使用onSuccessAPI的方法方法在MainActivity
随时随地看视频慕课网APP

相关分类

Java
我要回答