Android GoogleMaps v2:使用循环添加多个标记时出错'for'



我需要使用for循环向地图添加给定数量的标记。Log消息告诉我添加每个标记的函数被调用,但是在地图上只显示一个标记(最多两个)。我的两个函数如下:

private void paintInMap(String description){
    map.clear(); // to erase previous markers
    String[] zones = getResources().getStringArray(R.array.zonas); // array of place names
    String[] coord = getResources().getStringArray(R.array.coordinates); // array of place coordinates (placed in the same order)
    String[] route = description.split(", "); // split the different places of the route description
    for(int i=0; i<route.length; i++){
        for(int j=0; j<zones.length; j++{
            if(route[i].equals(zones[j])){
                LatLng latLng = getCoordinates(coord[j]); // call function to get coordinates from String
                placeMarker(latLng, zones[j]);
            }
        }
    }
}

:

private void placeMarker(LatLng coordinates, String name){
    map.addMarker(new MarkerOptions()
        .title(name)
        .icon(BitMapDescriptorFactory.fromResource(R.drawable.gpsmap))
        .position(coordinates)
        .flat(true)
        .rotation(90));
    Log.d("PLACE", name+" added to map");
}

显然我的代码是正确的,但在运行时它只显示一个(或两个)标记。我已经检查了Log消息和函数正在被调用,但标记没有出现。此外,其中一个标记出现在一个未指定的位置(顺便说一下,它对应于坐标数组的第一个值)

这是Eclipse中的运行时错误吗?我怎么解决这个问题?

    map.clear(); // to erase previous markers
    new AsyncTask<String, MarkerOptions, Void>() {
        private void placeMarker(LatLng coordinates, String name) {
            publishProgress(new MarkerOptions()
                .title(name)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.gpsmap))
                .position(coordinates)
                .flat(true)
                .rotation(90));
            Log.d("PLACE", name + " added to map");
        }
        @Override
        protected Void doInBackground(String... params) {
            String[] zones = getResources().getStringArray(R.array.zonas); // array of place names
            String[] coord = getResources().getStringArray(R.array.coordinates); // array of place coordinates (placed in the same order)
            String[] route = params[0].split(", "); // split the different places of the route description
            for (int i=0; i<route.length; i++) {
                for (int j=0; j<zones.length; j++) {
                    if (route[i].equals(zones[j])) {
                        LatLng latLng = getCoordinates(coord[j]); // call function to get coordinates from String
                        placeMarker(latLng, zones[j]);
                    }
                }
            }
            return null;
        }
        @Override
        protected void onProgressUpdate(MarkerOptions... markers) {
            map.addMarker(markers[0]);
        }
    }.execute(description);

我最终通过在UI线程中运行for循环而不是使用AsyncTask来解决它

......
route = descriptionRoute.split(", ");
coordinates = getCoordinates(coord);
String[] zonas = getResources().getStringArray(R.array.array_zonas_madrid);
String[] coord = getResources().getStringArray(R.array.array_coordinates);
for(int i=0; i<route.length; i++){
    for(int j=0; j<zonas.length; j++){
        if(route[i].equals(zonas[j])){
            LatLng latLng = getCoordinates(coord[j]);
            placeMarker(latLng, zonas[j]);
        }
    }
}
....

相关内容

  • 没有找到相关文章

最新更新