3

Ich entwickle eine App, in der ich mehrere Markierungen auf der Karte anzeigen möchte. (Marker kommen aus Datenbank (dynamodb) und Werte sind alle in "STRING" nicht doppelt). Nach der Konvertierung von Double in String aller "Lattitude and Longitudes" bekomme ich eine Ausnahme von java.lang.NumberFormatException: Invalid double: "n/a" und App stürzt ab. Denn in der Tabelle zeigt ein lat lange "na". (wie Sie in Bild X and Y are lattitudes and longitudes sehen können)Ungültiges doppeltes "n a" für Latlng-Werte beim Platzieren mehrerer Markierungen auf Karte erhalten

Ich blieb stecken und weiß nicht, was ich mit diesem leeren Wert tun soll. Soll ich etwas überprüfen oder was? Vielen Dank im Voraus

((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(); 
         } 
        } 
       }); 

      } 
     }); 
+0

Was zu tun ist, hängt von Ihrer App ab. Ich meine, Sie müssen Rechenschaft ablegen, aber möchten Sie den Benutzer bitten, die Daten zu korrigieren? Diesen Punkt nicht zeigen? Etwas anderes? THat ist etwas, das Sie entscheiden müssen. –

+0

in diesem Fall ... nur dieser bestimmte Latlng sollte nicht angezeigt werden, aber der Rest des Wertes sollte angezeigt werden. Ich meine einfach das "n \ a" überspringen und Rest des Ergebnisses zeigen. @GabeSchan –

+1

In diesem Fall wäre es ausreichend, NumberFormatException abzufangen und zum nächsten Datenpunkt zu wechseln. –

Antwort

3

Surround mit 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 
} 
+0

..thank Sie so sehr für Ihre Hilfe Bruder :) –

4
  1. Im catch-Block der Antwort von @OnkarShelke gegeben, Sie können manuell die Standardwerte in dem MMAP hinzufügen, anstatt einfach die Ausnahmebehandlung. Wie:

    mMap.add(new MarkerOptions().position(new LatLng(10.5,1.2)); 
    // 10.5 and 1.2 could be your default values. 
    
  2. Oder, da Sie bereits den falschen Wert kennen (n/a), die die Ausnahme verursacht, Sie für diesen Wert überprüfen könnten, bevor sie in den mMap hinzuzufügen versuchen. Wie:

    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())))); 
        } 
    } 
    
2

erste Filterliste, die SettlementsTable Objekt enthält, so dass, wenn es n/a String in den Objektfeldern sind nicht hinzufügen, dass zu Objekt zu Arraylist, die Sie dem Marker-Objekt zum Plotten bereitstellen.

+1

ja Ankit Sir .. Ich habe übersprungen, wenn es " n \ a "und fügte den nächsten gültigen Wert in Arraylist hinzu. Es ist eine Freude zu sehen, dass wir uns hier vereint haben, um mein Problem zu lösen. Ich danke dir sehr:) :) . –

Verwandte Themen