java - 如何正确创建 AsyncTask

标签 java android android-asynctask osmdroid

我是 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/

相关文章:

java - 如何使用 JNLP 文件包含依赖项 jar?

java - Hamcrest 匹配器检查响应 json 数组中的任何元素是否具有与 Rest Assured 中的特定值相同的属性值

java - MapReduce 2 作业在本地运行而不是提交到 yarn

android - 在 RecyclerView 上设置最大高度

android - 带有textview参数的AsyncTask

java - Android - 使用 Callable 进行联网

java - 使用java代码运行oracle脚本

android - 更改每个项目的 RecyclerView.ItemDecoration 颜色

java - 内部带有动态文本的可重复使用图像

Android Asynctask vs Runnable vs timertask vs Service