gpt4 book ai didi

java - 如何正确创建 AsyncTask

转载 作者:行者123 更新时间:2023-11-29 04:37:46 24 4
gpt4 key购买 nike

我是 Java 的新手,由于这个问题属于我工作中时间非常敏感的项目,所以我没有时间学习有关 AsyncTasks 的所有内容。所以我的问题是:

如何使用以下代码构造一个 AsyncTask

目标是在 map 上绘制路线。我用两个 Geopoints(路线的起始位置和目的地)填充 ArrayListroadManager 应该将这些路标发送到服务器,服务器将路线发回给我。

buildRoadOverlay 是最终在 map 上绘制路线的方法。

    RoadManager roadManager = new OSRMRoadManager(this);

ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
GeoPoint myLocation = new GeoPoint(51.488978, 6.746994);
waypoints.add(Location);
waypoints.add(myLocation);
Road road = roadManager.getRoad(waypoints);

我想这必须在 onPostExecute 方法中进行,对吧?:

    Polyline roadOverlay = RoadManager.buildRoadOverlay(road);
map.getOverlays().add(roadOverlay);

上层代码中的变量 location 源自不同的方法,我打算从中启动 Async 任务。意思是,我需要在调用它时将变量传输到 AsyncTask,我也不确定该怎么做。

这是变量location的初始化:

GeoPoint Location = new GeoPoint(Double.parseDouble(place.getLongitude()), 
Double.parseDouble(place.getLatitude()));

最佳答案

把耗时的任务放在doInBackground()中,更新view放在onPostExecute()中。

public void drawRouteAsync() {
GeoPoint location = new GeoPoint(Double.parseDouble(place.getLongitude()),
Double.parseDouble(place.getLatitude()));
GeoPoint myLocation = new GeoPoint(51.488978, 6.746994);

new RouteAsyncTask().execute(location, myLocation);
}

private class RouteAsyncTask extends AsyncTask<GeoPoint, Void, Road> {
@Override
protected Road doInBackground(GeoPoint... params) {
ArrayList<GeoPoint> waypoints = new ArrayList<GeoPoint>();
waypoints.add(params[0]); // location
waypoints.add(params[1]); // myLocation
RoadManager roadManager = new OSRMRoadManager(mContext); // your context
Road road = roadManager.getRoad(waypoints); // time consuming
return road;
}

@Override
protected void onPostExecute(Road road) {
Polyline roadOverlay = RoadManager.buildRoadOverlay(road);
map.getOverlays().add(roadOverlay); // update view
}
}

关于java - 如何正确创建 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40539617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com