[英]How to Update Marker And Indentify Markers Positions In GoogleMaps
I am creating a cab booking android app. 我正在创建出租车预订Android应用程序。 Here i am adding marker on map by using webservice but the problem i am able to change position for example after updating markers from server old marker still remain. 在这里,我通过使用Web服务在地图上添加标记,但是问题仍然存在,例如,从服务器旧标记更新标记后,仍然可以更改位置。 so how can i identity old marker and remove it first? 所以我该如何识别旧标记并先将其删除?
public Map<String, Marker> cabsMarker = new HashMap<>();
public List<ServiceData> list = new ArrayList<>();
private GoogleMap mMap;
public class ServiceData {
public String name;
public LatLng location;
public ServiceData(LatLng location, String name) {
this.location = location;
this.name = name;
}
}
public void add_all_real_time_cabs() throws NullPointerException {
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(GCMPushReceiverService.DATA_MESSAGE_STATUS_SUCCESS)) {
try {
String message = intent.getStringExtra(GCMPushReceiverService.JSON_ARRAY_RESPONSE);
JSONArray jarr = new JSONArray(message);
for (int i = 0; i < jarr.length(); i++) {
JSONObject jsonObject = jarr.getJSONObject(i);
All_UserMapDetail driver = new All_UserMapDetail();
if (!jsonObject.isNull(GCMPushReceiverService.FIRST_NAME_DRIVER_KEY)) {
driver.setName(jsonObject.getString(GCMPushReceiverService.FIRST_NAME_DRIVER_KEY));
Log.e("driver name", driver.getName());
}
if (!jsonObject.isNull(GCMPushReceiverService.DRIVER_PHONE_KEY)) {
driver.setPhone(jsonObject.getString(GCMPushReceiverService.DRIVER_PHONE_KEY));
}
if (!jsonObject.isNull(GCMPushReceiverService.LAT_DRIVER_KEY)) {
driver.setLat(Double.parseDouble(jsonObject.getString(GCMPushReceiverService.LAT_DRIVER_KEY)));
}
if (!jsonObject.isNull(GCMPushReceiverService.LON_DRIVER_KEY)) {
driver.setLon(Double.parseDouble(jsonObject.getString(GCMPushReceiverService.LON_DRIVER_KEY)));
Log.e("hgcghcghc", String.valueOf(driver.getLat()));
}
ServiceData data = new ServiceData(new LatLng(driver.getLat(), driver.getLon()), driver.getName());
list.add(data);
}
refreshMarkers();
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
}
and here is my refreshMarkers method. 这是我的refreshMarkers方法。
public void refreshMarkers () {
Map<String, Marker> updatedMarkers = new HashMap<String, Marker>();
for (ServiceData data : list) {
// if marker exists move its location, if not add new marker
Marker marker = cabsMarker.get(data.name);
if (marker == null) {
marker = mMap.addMarker(new MarkerOptions().position((data.location)).title(data.name));
} else {
marker.setPosition(data.location);
cabsMarker.remove(data.name);
}
updatedMarkers.put(data.name, marker);
Toast.makeText(getApplicationContext(), "jkbkjbl", Toast.LENGTH_LONG).show();
}
// all markers that are left in markers list need to be deleted from the map
for (Marker marker : cabsMarker.values()) {
marker.remove();
}
cabsMarker = updatedMarkers;
}
can anyone help me were i am wrong? 谁能帮助我我错了吗?
在添加新标记列表之前,应先清除标记列表,然后运行ur refreshmarker功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.