J'applique l'application google map où je fais un appel api à mon serveur et reçoit l'emplacement actuel de peu de personne ou d'objet ou de tout ce que vous pouvez considérer comme. À chaque appel API, l'emplacement de réponse de chaque objet change. A la réception de la réponse, j'ajoute un marqueur sur la base du lieu et de l'identifiant reçu. Je suis capable d'additionner le marqueur, mais dans le processus d'ajout de marqueur, je supprime tout le marqueur précédent ajouté dans le même processus mais malheureusement, il fonctionne mais conserve deux instances de marqueur pour le même identifiant.Marqueur est ajouté deux fois sur l'appel api dans la tâche asynchrone
C'est l'appel de fil pour l'appel 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));
}
}
}
}
C'est l'endroit où j'ai appelé le fil.
@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);
}
}
Le marqueur qui j'ajouté de l'appel API est de couleur magenta. Je ne pouvais pas comprendre ce qui ne va pas. Quelqu'un peut m'aider?
NB: En temps réel ce qui se passe ici est, sur deux marqueurs on disparaît et prend une nouvelle position et cela continue alternativement.
Mais idéalement, tout devrait disparaître simultanément et prendre une nouvelle position simultanément.