google 地图标记在添加新标记后未被删除

google maps markers is not being removed after adding new

我目前正在开发一款可以向学生显示公交车位置的应用!
问题是当我从地图上删除带有 marker.remove();map.clear(); 的标记并检索新位置并将其显示在地图上时,旧位置仍然显示。
这是我的代码:

@Override
  public void onMapReady(final GoogleMap googleMap) {
    map = googleMap;
    map.getUiSettings().setMyLocationButtonEnabled(false);
    map.setMyLocationEnabled(false);

    new Timer().scheduleAtFixedRate(new TimerTask() {
      @Override
      public void run() {
        Webi.with(getContext())
          .from("http://31.25.91.60:8888/GetResult.php")
          .onResponse(new OnResponse() {
            @Override
            public void Response(String content, String s1) {
              try {
                JSONArray arr = new JSONArray(content);
                if(arr.length() > 0) {
                  for (int i = 0; i < arr.length(); i++) {
                    JSONObject jobj = arr.getJSONObject(i);

                    name.add(jobj.getString("driverid"));
                    lat.add(jobj.getString("lat"));
                    latlong.add(jobj.getString("longlat"));
                    time.add(jobj.getString("time"));
                  }

                  for(int index = 0; index < name.size(); index++) {
                    final int finalIndex = index;
                    getActivity().runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                        try {
                          LatLng point = new LatLng(Double.parseDouble(lat.get(finalIndex)),Double.parseDouble(latlong.get(finalIndex)));
                          MarkerOptions markerOptions = new MarkerOptions()
                            .position(point)
                            .title(name.get(finalIndex))
                            .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_pin));
                          marker = map.addMarker(markerOptions);
                          markers.add(marker);
                        } catch (Exception e) {
                          e.printStackTrace();
                        }
                      }
                    });
                  }
                } else {
                  Toast.makeText(getActivity(), "چیزی پیدا نشد !", Toast.LENGTH_SHORT).show();
                  map.clear();
                }
              } catch (Exception e) {
                map.clear();
                e.printStackTrace();
              }
            }
          }).connect();
      }
    }, 0, 10000);
    LatLng university = new LatLng(36.2497511,58.8287331);
    CameraPosition cameraPosition = new CameraPosition.Builder()
      .target(university)
      .zoom(17)
      .bearing(90)
      .tilt(40)
      .build();
    map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
  }

  private Runnable runnable = new Runnable() {
    @Override
    public void run() {
      try {
        for(int index = 0; index < markers.size(); index++) {
          marker = markers.get(index);
          marker.remove();
          map.clear();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      handler.postDelayed(this, 9000);
    }
  };

每 10 秒从服务器获取一次日期,每 9 秒必须删除一次标记

尝试将您的 map.clear() 和整个 for 循环移动到 UI 线程 Runnable 中。我认为您总是希望在添加新标记之前清除地图。否则,您将无法同步这两个操作。例如,运行 2 次后,标记将在 18 秒时被移除,然后直到 20 秒才添加。

另外,我没看到你在哪里清除数据列表,你是在添加新的响应数据之前这样做的吗?

getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
        map.clear();
        for(int index = 0; index < name.size(); index++) {
            try {
                LatLng point = new LatLng(Double.parseDouble(lat.get(index)), Double.parseDouble(latlong.get(index)));
                MarkerOptions markerOptions = new MarkerOptions()
                        .position(point)
                        .title(name.get(index))
                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus_pin));
                marker = map.addMarker(markerOptions);
                markers.add(marker);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
});