有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java(GWT传单)层返回“\u传单\u id”属性的“null”

我有网格和我班的土工栅栏。另外,我使用传单来创建层,也就是地理围栏。 当我从服务器获取geofence时,我填充网格,创建图层并将其添加到FeatureGroup drawnItems。我将层的属性设置为geofence的id。 代码如下:

if (200 == response.getStatusCode()) {
   JsArray<Geofence> geofenceJsArray = JsonUtils.safeEval(response.getText());
ILayer iLayer;
   for (int i = 0; i < geofenceJsArray.length(); i++) {
       geofenceStore.add(geofenceJsArray.get(i));
       JsArray<Coordinate> coordinateJsArray = geofenceJsArray.get(i).getCoordinates();
       if (geofenceJsArray.get(i).getType() == Type.CIRCLE) {
         double lat = coordinateJsArray.get(0).getLatitude();
         double lon = coordinateJsArray.get(0).getLongitude();
         LatLng latLng = new LatLng(lat, lon);
         double radius = geofenceJsArray.get(i).getRadius();
         Options options = new Options();
         iLayer = new Circle(latLng, radius, options);
         iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());
      } else {
         PolylineOptions polylineOptions = new PolylineOptions();
         LatLng[] latLngArray = new LatLng[coordinateJsArray.length()];
         for (int j = 0; j < coordinateJsArray.length(); j++) {
           double lat = coordinateJsArray.get(i).getLatitude();
           double lon = coordinateJsArray.get(i).getLongitude();
           latLngArray[j] = new LatLng(lat, lon);
         }
         iLayer = new Polygon(latLngArray, polylineOptions);
         iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());
      }
      drawnItems.addLayer(iLayer);
      map.addLayer(iLayer);
 }

但当我想移除一些像这样的土工栅栏时: enter image description here

使用此代码:

if (204 == response.getStatusCode()) {
  ILayer layerForRemove = null;
  for (int i = 0; i < drawnItems.getLayers().length; i++) {
    LoggerHelper.log(className, "_leaflet_id: " + drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "");
    if (selectedGeofence.getId() == Integer.parseInt(drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "")) {
      layerForRemove = drawnItems.getLayers()[i];
    }
  }
  drawnItems.removeLayer(layerForRemove);
  geofenceStore.remove(selectedGeofence);
  Info.display("Уведомление", "Геозона " + selectedGeofence.getName() + " успешно удалено!");
  LoggerHelper.log(className, "Device " + selectedGeofence.getName() + " has been removed. Bye-bye!");
} else {
    Info.display("Ошибка", "Не удалось удалить геозону  " + selectedGeofence.getName());
    LoggerHelper.log(className, "Error while deleting device. " +
                                        "Error code: " + response.getStatusCode() +
                                        ". Error status message: " + response.getStatusText());
}

我收到的传单id在此行中为“空”

LoggerHelper.log(className, "_leaflet_id: " + drawnItems.getLayers()[i].getOptions().getProperty("_leaflet_id") + "");

为什么??因为我是在这行设置的:

iLayer.getJSObject().setProperty("_leaflet_id", geofenceJsArray.get(i).getId());

提前感谢您的回答


共 (1) 个答案

  1. # 1 楼答案

    你根本不应该处理传单层的_leaflet_idprivate属性。这样做会产生意想不到的问题

    您可以自由地向传单图层添加自定义特性,并保留对它们的引用,例如:

    var geofencesById = {}
    
    for (...) {
        layer = L.polygon(...);
    
        layer._geofence_id = geofenceJsArray.get(i).getId();
        geofencesById[ geofenceJsArray.get(i).getId() ] = layer;
    }