Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以从异步任务中添加标记?_Android_Google Maps - Fatal编程技术网

Android 是否可以从异步任务中添加标记?

Android 是否可以从异步任务中添加标记?,android,google-maps,Android,Google Maps,在我的Android上有一个谷歌地图,我对新的谷歌地图API还不熟悉。上面有一个初始标记。 这是显示地图和初始标记的方法: @Override public void onMapReady(GoogleMap map) { //map is ready // latitude and longitude double latitude = latitud_del_hotel; double longitude =long

在我的Android上有一个谷歌地图,我对新的谷歌地图API还不熟悉。上面有一个初始标记。 这是显示地图和初始标记的方法:

  @Override
    public void onMapReady(GoogleMap map) {
        //map is ready
        // latitude and longitude
        double latitude = latitud_del_hotel;
        double longitude =longitud_del_hotel;

        // create marker
        MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title(nombre_del_hotel).icon(BitmapDescriptorFactory.fromResource(R.drawable.poi));

        // Changing marker icon
        // marker.icon(BitmapDescriptorFactory
        // .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

        // adding marker
        map.addMarker(marker);
        map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(new LatLng(latitud_del_hotel, longitud_del_hotel)).zoom(15).build();
        map.animateCamera(CameraUpdateFactory
                .newCameraPosition(cameraPosition));
    }
现在,我需要在上面加上其他标记。这些标记是我在另一个方法上从活动中检索的JSON对象

也许我的问题很愚蠢,但我不知道如何在同一张地图上添加标记,但却是用另一种方法创建的

这就是我如何在另一个方法上创建新标记的方法:

 hotel.setNombre(obj.getString("nombre_hotel"));
                                        hotel.setLatitud(obj.getDouble("latitud_hotel"));
                                        hotel.setLongitud(obj.getDouble("longitud_hotel"));
                                        hotel.setDireccion(obj.getString("direccion_hotel"));

                                        String nombre = obj.optString("nombre_hotel");
                                        Log.d("NOMBRE=", nombre);

                                        String latitud = obj.optString("latitud_hotel");
                                        double latitud_del_hotel = Double.parseDouble(latitud);

                                        String longitud = obj.optString("longitud_hotel");
                                        double longitud_del_hotel = Double.parseDouble(longitud);

                                        // create marker
                                        MarkerOptions marker = new MarkerOptions().position(new LatLng(latitud_del_hotel, longitud_del_hotel)).title(nombre).icon(BitmapDescriptorFactory.fromResource(R.drawable.poi));


                                        map.addMarker(marker);
但显然,行
map.addMarker(marker)显示警告:无法解析符号映射

对不起,如果这很容易解决,但我不能

谢谢。

在您的onMapReady(…)中,向返回的映射添加一个字段引用

public void onMapReady(GoogleMap map) {
    this.googleMap = map;
然后,您可以执行以下操作:

// create marker
if(this.googleMap != null) {
    MarkerOptions marker = new MarkerOptions(...);
    this.googleMap.addMarker(marker);
}
这可能会造成所谓的竞争条件——如果您检索酒店位置信息的网络调用在地图准备就绪之前返回结果,您将永远无法将结果添加到地图中

您可以通过以下方式来解决此问题:

// Create this as a field:
List<MarkerOptions> markerOptions = new ArrayList<>();

MarkerOptions marker = new MarkerOptions(...);
if(this.googleMap != null) {
    this.googleMap.addMarker(marker);
} else {
    this.markerOptions.add(marker);
}
在onMapReady(…)中,向返回的映射添加字段引用

public void onMapReady(GoogleMap map) {
    this.googleMap = map;
然后,您可以执行以下操作:

// create marker
if(this.googleMap != null) {
    MarkerOptions marker = new MarkerOptions(...);
    this.googleMap.addMarker(marker);
}
这可能会造成所谓的竞争条件——如果您检索酒店位置信息的网络调用在地图准备就绪之前返回结果,您将永远无法将结果添加到地图中

您可以通过以下方式来解决此问题:

// Create this as a field:
List<MarkerOptions> markerOptions = new ArrayList<>();

MarkerOptions marker = new MarkerOptions(...);
if(this.googleMap != null) {
    this.googleMap.addMarker(marker);
} else {
    this.markerOptions.add(marker);
}
在onMapReady(…)中,向返回的映射添加字段引用

public void onMapReady(GoogleMap map) {
    this.googleMap = map;
然后,您可以执行以下操作:

// create marker
if(this.googleMap != null) {
    MarkerOptions marker = new MarkerOptions(...);
    this.googleMap.addMarker(marker);
}
这可能会造成所谓的竞争条件——如果您检索酒店位置信息的网络调用在地图准备就绪之前返回结果,您将永远无法将结果添加到地图中

您可以通过以下方式来解决此问题:

// Create this as a field:
List<MarkerOptions> markerOptions = new ArrayList<>();

MarkerOptions marker = new MarkerOptions(...);
if(this.googleMap != null) {
    this.googleMap.addMarker(marker);
} else {
    this.markerOptions.add(marker);
}
在onMapReady(…)中,向返回的映射添加字段引用

public void onMapReady(GoogleMap map) {
    this.googleMap = map;
然后,您可以执行以下操作:

// create marker
if(this.googleMap != null) {
    MarkerOptions marker = new MarkerOptions(...);
    this.googleMap.addMarker(marker);
}
这可能会造成所谓的竞争条件——如果您检索酒店位置信息的网络调用在地图准备就绪之前返回结果,您将永远无法将结果添加到地图中

您可以通过以下方式来解决此问题:

// Create this as a field:
List<MarkerOptions> markerOptions = new ArrayList<>();

MarkerOptions marker = new MarkerOptions(...);
if(this.googleMap != null) {
    this.googleMap.addMarker(marker);
} else {
    this.markerOptions.add(marker);
}

感谢@jyanks,映射是在onCreateView方法中创建的,JSON调用是在onCreateView中创建的。是的,因此如果在截击调用返回后onMapReady完成,您需要捕获MarkerOptions。在活动顶部,在任何方法之外:
private GoogleMap GoogleMap我已经解决了它,但用另一种方式。JSON调用是通过setOnClickListener方法进行的。现在我已经从onCreateView方法中删除了它,并在onMapReady方法中加入了一些更改,它工作得很好……感谢您的帮助。感谢@jyanks,地图是在onCreateView方法中创建的,JSON调用是在onCreateView中创建的。是的,因此,您需要捕获标记选项,以防在截击调用返回后onMapReady完成我已经解决了它,但用另一种方式。JSON调用是通过setOnClickListener方法进行的。现在我已经从onCreateView方法中删除了它,并在onMapReady方法中加入了一些更改,它工作得很好……感谢您的帮助。感谢@jyanks,地图是在onCreateView方法中创建的,JSON调用是在onCreateView中创建的。是的,因此,您需要捕获标记选项,以防在截击调用返回后onMapReady完成我已经解决了它,但用另一种方式。JSON调用是通过setOnClickListener方法进行的。现在我已经从onCreateView方法中删除了它,并在onMapReady方法中加入了一些更改,它工作得很好……感谢您的帮助。感谢@jyanks,地图是在onCreateView方法中创建的,JSON调用是在onCreateView中创建的。是的,因此,您需要捕获标记选项,以防在截击调用返回后onMapReady完成我已经解决了它,但用另一种方式。JSON调用是通过setOnClickListener方法进行的。现在,我已经从onCreateView方法中删除了它,并将其与onMapReady方法中的一些更改一起包括在内,它工作得很好……感谢您的帮助。