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

如何从以下代码构造AsyncTask

目标是在地图上绘制路线。我用两个ArrayList填充Geopoints(起点和路线的目的地)。 roadManager应该将那些航点发送到服务器,该服务器将我发送回该路线。

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

    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()中,在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
    }
}

08-18 04:31