在地图上放置多个标记时获取 Latlng 值的无效双 "n\a"
Getting invalid double "n\a" for Latlng values while placing multiple markers on map
我正在开发一个应用程序,我想在地图上显示多个标记。
(标记来自数据库(dynamodb),值都在 "STRING" 中,而不是双精度)。将所有 "Lattitudes and Longitudes" 的双精度转换为字符串后,出现 java.lang.NumberFormatException 异常:双精度无效:"n/a" 并且应用程序崩溃。因为在 table 中,一个纬度显示 "na"。 (如图所示)
我卡住了,不知道如何处理这个空值。我应该放一些支票还是什么?提前致谢
((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
final LatLng israel = new LatLng(31.0461, 34.8516);
googleMap.addMarker(new MarkerOptions().position(israel).title("israel"));
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
CameraPosition camPos = new CameraPosition.Builder().target(new LatLng(31.0461, 34.8516)).zoom(8).tilt(70).build();
CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(camPos);
googleMap.animateCamera(camUpd3);
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
DDBExecutor.getInstance().getAllSettlements(mContext, new DDBExecutor.OnResponseListener() {
@Override
public void onResponse(Object result, String message) {
List<SettlementsTable> lstSettlements = new ArrayList<>();
lstSettlements.addAll((List<SettlementsTable>) result);
for (SettlementsTable table : lstSettlements){
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(table.getX()), Double.parseDouble(table.getY()))));
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(israel);
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 200);
mMap.moveCamera(cu);
mMap.animateCamera(CameraUpdateFactory.zoomTo(8), 2000, null);
try {
KmlLayer kmlLayer = new KmlLayer(googleMap, R.raw.settlements, getApplicationContext());
kmlLayer.addLayerToMap();
KmlLayer kmlLayer1 = new KmlLayer(googleMap, R.raw.outposts, getApplicationContext());
kmlLayer1.addLayerToMap();
KmlLayer kmlLayer2 = new KmlLayer(googleMap, R.raw.settlements_in_pal_nghbrhd, getApplicationContext());
kmlLayer2.addLayerToMap();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
});
在@OnkarShelke给出的答案的catch块中,可以
在 mMap 中手动添加默认值,而不是简单地
处理异常。喜欢:
mMap.add(new MarkerOptions().position(new LatLng(10.5,1.2));
// 10.5 and 1.2 could be your default values.
或者因为您已经知道导致
异常,您可以在尝试添加到 mMap
之前检查该值。喜欢:
for (SettlementsTable table : lstSettlements){
if (table.getX().equalsIgnoreCase("n/a") || table.getY().equalsIgnoreCase("n/a")) {
// do something like add default values
} else {
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(table.getX()), Double.parseDouble(table.getY()))));
}
}
用 try catch 环绕
try {
mMap.addMarker(new MarkerOptions().position(new
LatLng(Double.parseDouble(table.getX()),
Double.parseDouble(table.getY()))));
} catch (NumberFormatException ex){
//do anything when exception occurs
}
包含 SettlementsTable 对象的第一个过滤器列表,这样当对象字段中有 n/a 字符串时,不要将其添加到要提供给 Marker 对象用于绘图的 Arraylist 对象。
我正在开发一个应用程序,我想在地图上显示多个标记。
(标记来自数据库(dynamodb),值都在 "STRING" 中,而不是双精度)。将所有 "Lattitudes and Longitudes" 的双精度转换为字符串后,出现 java.lang.NumberFormatException 异常:双精度无效:"n/a" 并且应用程序崩溃。因为在 table 中,一个纬度显示 "na"。 (如图所示
我卡住了,不知道如何处理这个空值。我应该放一些支票还是什么?提前致谢
((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
final LatLng israel = new LatLng(31.0461, 34.8516);
googleMap.addMarker(new MarkerOptions().position(israel).title("israel"));
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
CameraPosition camPos = new CameraPosition.Builder().target(new LatLng(31.0461, 34.8516)).zoom(8).tilt(70).build();
CameraUpdate camUpd3 = CameraUpdateFactory.newCameraPosition(camPos);
googleMap.animateCamera(camUpd3);
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
DDBExecutor.getInstance().getAllSettlements(mContext, new DDBExecutor.OnResponseListener() {
@Override
public void onResponse(Object result, String message) {
List<SettlementsTable> lstSettlements = new ArrayList<>();
lstSettlements.addAll((List<SettlementsTable>) result);
for (SettlementsTable table : lstSettlements){
mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(table.getX()), Double.parseDouble(table.getY()))));
}
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(israel);
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 200);
mMap.moveCamera(cu);
mMap.animateCamera(CameraUpdateFactory.zoomTo(8), 2000, null);
try {
KmlLayer kmlLayer = new KmlLayer(googleMap, R.raw.settlements, getApplicationContext());
kmlLayer.addLayerToMap();
KmlLayer kmlLayer1 = new KmlLayer(googleMap, R.raw.outposts, getApplicationContext());
kmlLayer1.addLayerToMap();
KmlLayer kmlLayer2 = new KmlLayer(googleMap, R.raw.settlements_in_pal_nghbrhd, getApplicationContext());
kmlLayer2.addLayerToMap();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
});
在@OnkarShelke给出的答案的catch块中,可以 在 mMap 中手动添加默认值,而不是简单地 处理异常。喜欢:
mMap.add(new MarkerOptions().position(new LatLng(10.5,1.2)); // 10.5 and 1.2 could be your default values.
或者因为您已经知道导致 异常,您可以在尝试添加到
mMap
之前检查该值。喜欢:for (SettlementsTable table : lstSettlements){ if (table.getX().equalsIgnoreCase("n/a") || table.getY().equalsIgnoreCase("n/a")) { // do something like add default values } else { mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(table.getX()), Double.parseDouble(table.getY())))); } }
用 try catch 环绕
try {
mMap.addMarker(new MarkerOptions().position(new
LatLng(Double.parseDouble(table.getX()),
Double.parseDouble(table.getY()))));
} catch (NumberFormatException ex){
//do anything when exception occurs
}
包含 SettlementsTable 对象的第一个过滤器列表,这样当对象字段中有 n/a 字符串时,不要将其添加到要提供给 Marker 对象用于绘图的 Arraylist 对象。