【问题标题】:Getting invalid double "n\a" for Latlng values while placing multiple markers on map在地图上放置多个标记时,获取 Latlng 值的无效双“n\a”
【发布时间】:2017-10-26 13:21:43
【问题描述】:

我正在开发一个应用程序,我想在地图上显示多个标记。 (标记来自数据库(dynamodb),值都在“STRING”中,而不是双精度)。将双精度转换为所有“纬度和经度”的字符串后,出现 java.lang.NumberFormatException: Invalid double: "n/a" 和应用程序崩溃的异常。因为在表格中,一拉长显示“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();
                      }
                  }
              });

            }
        });

【问题讨论】:

  • 做什么取决于你的应用。我的意思是你需要考虑它,但你想要求用户修复数据吗?不显示那个点?还有什么?这是你需要决定的事情。
  • 在这种情况下......只有那个特定的 Latlng 不应该显示,但其余的值应该显示。我的意思是跳过“n\a”并显示其余的结果。 @GabeSechan
  • 在这种情况下,捕获 NumberFormatException 并移动到下一个数据点就足够了。
  • 好的,谢谢,让我检查并支持您的评论
  • 检查它的双倍然后解析,如果不是然后将值设置为0

标签: java android google-maps amazon-dynamodb google-maps-markers


【解决方案1】:

用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
}

【讨论】:

    【解决方案2】:
    1. 在@OnkarShelke 给出的答案的 catch 块中,您可以 在 mMap 中手动添加默认值,而不是简单地 处理异常。喜欢:

      mMap.add(new MarkerOptions().position(new LatLng(10.5,1.2));
      // 10.5 and 1.2 could be your default values.
      
    2. 或者因为您已经知道导致 例外,您可以在尝试添加到 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()))));
          }
      }
      

    【讨论】:

      【解决方案3】:

      包含 SettlementsTable 对象的第一个过滤器列表,这样当对象字段中存在 n/a 字符串时,不要将其添加到您提供给 Marker 对象以进行绘图的 Arraylist 对象。

      【讨论】:

      • 是的 Ankit 先生。如果有 "n\a" 我已经跳过,并在 Arraylist 中添加了下一个有效值。很高兴看到我们在这里团结起来解决我的问题。非常感谢:) :) .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      相关资源
      最近更新 更多