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);
}
使用此代码:
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 楼答案
你根本不应该处理传单层的
_leaflet_id
private属性。这样做会产生意想不到的问题您可以自由地向传单图层添加自定义特性,并保留对它们的引用,例如: