Как удалить маркеры на карте из данных JSON? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть данные json, например:

[
 {
  "id": 1,
  "name": "name",
  "login": "login",
  "lat": "43.854891",
  "lng": "73.536660"
 },
 {
  "id": 2,
  "name": "name",
  "login": "login",
  "lat": "53.954891",
  "lng": "73.536660"
 }
]

Я получаю все данные из json и показываю их, но при изменении местоположения я не могу отобразить новые данные без удаления старых местоположений.Также есть текущее местоположение, на котором отображается и удаляется старое местоположение.Вот мой код:

    private static final String REQUEST_URL = "http://192.168.1.103:8080/";

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    checkPermission();
    buildGoogleApiClient();
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    LocationSearchTask locationSearchTask = new LocationSearchTask();
    locationSearchTask.execute(REQUEST_URL);

}


@Override
public void onLocationChanged(Location location) {
    Log.i(TAG, location.toString());
    latitude = location.getLatitude();
    longitude = location.getLongitude();
    LatLng latLng = new LatLng(latitude, longitude);
    if (currentMarker != null) {
        currentMarker.remove();
    }
    displayLocation(latLng, 15f, location);
    updateOtherLocations();
}  
public void updateOtherLocations() {
    LocationSearchTask locationSearchTask = new LocationSearchTask();

    locationSearchTask.execute(REQUEST_URL);
}

class LocationSearchTask extends AsyncTask<String, Void, List<User>> {

  @Override
    protected List<User> doInBackground(String... urls) {
        try {
            if (urls.length < 1 || urls[0] == null) {
                return null;
            }
            List<User> result = QueryData.fetchUsersData(urls[0]);
            return result;
        } catch (Exception e) {
            Toast.makeText(MapsActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return null;
        }
    }

    @Override
    protected void onPostExecute(List<User> users) {
        try {

            for (User user : users) {
                LatLng position = new LatLng(user.getLat(), user.getLng());
                // add marker
                otherMarkers = mMap.addMarker(new MarkerOptions()
                        .position(position)
                        .title(user.getFirstName())
                        .icon(bitmapDescriptorFromVector(getApplicationContext(), R.mipmap.ic_navigation))
                        .snippet(user.getEmail()));
            }

        } catch (Exception e) {
            Toast.makeText(MapsActivity.this, "Sorry other locations are unavailable! Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }

Как удалить ** другие местоположения ** и отобразить новые местоположения?И я знаю, что это плохой код, и если вы можете порекомендовать мне, что еще стоит изменить.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Существует существующее поле на маркере, чтобы сделать его видимым или невидимым. Видеть видимым в документе маркера ?

0 голосов
/ 22 мая 2018

Вы можете использовать mMap.clear(), чтобы удалить все маркеры с карты.Если вы хотите обновить местоположение маркера (в случае текущего маркера), удерживайте ранее добавленный маркер и измените его как marker.setPosition(new LatLng(50,5));

...