Android 是否可以从异步任务中添加标记?
在我的Android上有一个谷歌地图,我对新的谷歌地图API还不熟悉。上面有一个初始标记。 这是显示地图和初始标记的方法: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
@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方法中的一些更改一起包括在内,它工作得很好……感谢您的帮助。