我的 Yandex 地图中有近 50 辆汽车,其中对象的坐标来自 API,我必须按汽车的位置绘制汽车并每 5 秒更新一次坐标。当我第一次运行应用程序时,没关系,但 5 秒后它会在旧对象旁边绘制另一个对象(汽车),几秒钟后,它会在我的地图中显示与一辆车相关的许多汽车。我的问题是如何删除之前绘制的对象并仅保留最后更新的对象。提前致谢!我是 android 新手:) import java.io.BufferedReader; 导入 java.io.IOException;导入 java.io.InputStreamReader;导入 java.net.MalformedURLException;导入 java.net.URL;导入 java.net.URLConnection;导入 java.util.ArrayList;导入 java.util.List;导入 java.util.Timer;导入 java.util.TimerTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import ru.yandex.yandexmapkit.*;
import ru.yandex.yandexmapkit.overlay.Overlay;
import ru.yandex.yandexmapkit.overlay.OverlayItem;
import ru.yandex.yandexmapkit.overlay.balloon.BalloonItem;
import ru.yandex.yandexmapkit.utils.GeoPoint;
public class BalloonOverlayActivity extends Activity {
MapController mMapController;
OverlayManager mOverlayManager;
Timer timer;
List<Car> listCars = new ArrayList<Car>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(R.string.app_name);
setContentView(R.layout.sample);
final MapView mapView = (MapView) findViewById(R.id.map);
mMapController = mapView.getMapController();
mOverlayManager = mMapController.getOverlayManager();
mOverlayManager.getMyLocation().setEnabled(false);
mMapController.setPositionAnimationTo(new GeoPoint(51.0708045959473,71.3955688476563));
timer = new Timer();
timer.schedule(new MyTimerTask(), 1000, 5000);
}
public void showObject() {
Resources res = getResources();
Overlay overlay = new Overlay(mMapController);
List<OverlayItem> carsItem = new ArrayList<OverlayItem>();
for (Car c : listCars) {
final OverlayItem car = new OverlayItem(
new GeoPoint(c.lat, c.lon),
res.getDrawable(R.drawable.car));
BalloonItem balloonCar = new BalloonItem(this, car.getGeoPoint());
balloonCar.setText("Машина "+c.num);
car.setBalloonItem(balloonCar);
overlay.addOverlayItem(car);
carsItem.add(car);
}
System.out.println(overlay.getOverlayItems().size());
mOverlayManager.addOverlay(overlay);
}
public void getData() {
listCars.clear();
try {
URL komandir = new URL("http://google.kz........");
URLConnection tc = komandir.openConnection();
Log.d("connection", tc+"");
BufferedReader in = new BufferedReader(new InputStreamReader(
tc.getInputStream()));
String line="";
String message="";
while ((line =in.readLine()) != null) {
message=message+line;
Log.d("message", message);
}
JSONObject main=new JSONObject(message);
JSONObject data=main.getJSONObject("data");
JSONArray array = data.getJSONArray("crews_coords");
for (int i = 0; i < array.length(); i++) {
JSONObject object = (JSONObject) array.get(i);
listCars.add(new Car(object.getInt("crew_id"), object
.getString("crew_code"), object.getDouble("lon"), object
.getDouble("lat")));
}
showObject();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
getData();
}
}
}