1
我正在實施谷歌地圖應用程序,我正在對我的服務器進行api調用,並接收少數人或對象或任何可以視爲的東西的當前位置。在每個API調用中,每個對象的響應位置都會發生變化。收到迴應後,我會根據收到的位置和ID添加標記。我可以將標記加起來,但我在標記的添加過程中刪除了在同一過程中添加的所有以前的標記,但不幸的是它正在工作,但爲相同的標識維護兩個標記實例。標記添加兩次在異步任務中的API調用
這是線程調用API調用
public class GetNearbyVehicle extends AsyncTask<String, Void, ArrayList<ActiveVehiclePosition>> {
static GoogleMap mMap;
static ArrayList<ActiveVehiclePosition> activeVehiclePositionArrayList;
static HashMap<ActiveVehiclePosition, Marker> activeVehiclePositionHashMap;
public static HashMap<ActiveVehiclePosition, Marker> getNearbyVehicle(GoogleMap mMap1, HashMap<ActiveVehiclePosition, Marker> oldVehiclePositionHashMap){
String url= "some url";
mMap= mMap1;
if(oldVehiclePositionHashMap != null){
for (Map.Entry<ActiveVehiclePosition, Marker> entry : oldVehiclePositionHashMap.entrySet()) {
Marker m= entry.getValue();
m.remove();
}
}
new GetNearbyVehicle().execute(url);
return activeVehiclePositionHashMap;
}
@Override
protected ArrayList<ActiveVehiclePosition> doInBackground(String... params) {
String url= params[0];
try {
ArrayList<ActiveVehiclePosition> ar= new ArrayList<>();
ar= JsonConverter.getNearByVehicle(url);
if(ar != null){
activeVehiclePositionArrayList= ar;
}
} catch (Exception e) {
e.printStackTrace();
}
return activeVehiclePositionArrayList;
}
@Override
protected void onPostExecute(ArrayList<ActiveVehiclePosition> activeVehiclePositions) {
super.onPostExecute(activeVehiclePositions);
activeVehiclePositionHashMap= new HashMap<>();
if(activeVehiclePositions != null){
for(int i=0; i<activeVehiclePositions.size(); i++){
MarkerOptions markerOptions= new MarkerOptions();
markerOptions.position(activeVehiclePositions.get(i).getLatLng());
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
markerOptions.title(activeVehiclePositions.get(i).getDriver().getName());
activeVehiclePositionHashMap.put(activeVehiclePositions.get(i), mMap.addMarker(markerOptions));
}
}
}
}
這是從哪兒我叫線程的位置。
@Override
public void onLocationChanged(Location location) {
currLatLng = new LatLng(location.getLatitude(), location.getLongitude());
if(sourceMarker != null && LOOKING_FOR == CURRENT_LOCATION_POINTER) sourceMarker.remove();
else if(destinationMarker != null && LOOKING_FOR == FINAL_LOCATION_POINTER) destinationMarker.remove();
if(LOOKING_FOR == CURRENT_LOCATION_POINTER){
setCurrentLocationMarker(currLatLng, sourceMarker);
activeVehiclePositionArrayList= GetNearbyVehicle.getNearbyVehicle(mMap, activeVehiclePositionArrayList);
}
else if(LOOKING_FOR == FINAL_LOCATION_POINTER){
setCurrentLocationMarker(currLatLng, destinationMarker);
}
}
這是我從API調用添加的標記是在品紅顏色。 我無法理解它有什麼問題。誰能幫我嗎?
注意:實時發生的情況是,兩個標記之一消失並且佔據新的位置,並且這個交替地繼續。
但理想情況是所有應該同時消失並同時佔據新的位置。