2017-11-03 3 views
1

Erhalte diesen Fehler, wenn du einen Ort auf der Karte suchen willst. Andere Lösungen bei der Suche versucht, aber kein Glück. java.lang.IllegalStateException: keine enthaltenen Punkte in dieser Zeile: LatLngBounds.Builder builder = new LatLngBounds.Builder(); Code verwende ich:java.lang.IllegalStateException: keine Punkte enthalten?

try { 
          JSONObject jsonObject = new JSONObject(response.body().toString()); 
          JSONArray jsonArray = jsonObject.getJSONArray("routes"); 

          for (int i = 0; i < jsonArray.length(); i++) { 
           JSONObject route = jsonArray.getJSONObject(i); 
           JSONObject poly = route.getJSONObject("overview_polyline"); 
           String polyline = poly.getString("points"); 
           polyLineList = decodePoly(polyline); 
          } 

          // Adjusting Bounds 
          LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
          for (LatLng latLng:polyLineList) { 
           builder = builder.include(latLng); 
          } 
          LatLngBounds bounds = builder.build(); 
          CameraUpdate mCameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, 2); 
          mMap.animateCamera(mCameraUpdate); 


private List decodePoly(String encoded) { 

    List poly = new ArrayList(); 
    int index = 0, len = encoded.length(); 
    int lat = 0, lng = 0; 

    while (index < len) { 
     int b, shift = 0, result = 0; 
     do { 
      b = encoded.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 
     int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
     lat += dlat; 

     shift = 0; 
     result = 0; 

     do { 
      b = encoded.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 
     int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
     lng += dlng; 

     LatLng p = new LatLng((((double) lat/1E5)), (((double) lng/1E5))); 
     poly.add(p); 
    } 

    return poly; 
} 

Jede Hilfe willkommen wäre stark

enter image description here

+0

Ich denke, das könnte ein Duplikat von [Android Google V2 MarkerDemo Illegal keine eingeschlossenen Punkte] sein (https://stackoverflow.com/questions/14878077/android -googlemaps-v2-markerdemo-illegalstateexception-no-included-punkte) –

+0

Ich habe mir das angesehen und bin immer noch nicht in der Lage, das zu beheben. Wie kann ich dies in den von mir bereitgestellten Code implementieren? Dies ist ein Tutorial, das ich mache. – LizG

Antwort

1

Ihr aktueller Code wird in der Liste die letzte Strecke nur mit, aber es ist üblich, die ersten zu verwenden Route in der Liste statt einer der alternativen Routen.

Um die decodierte Polylinienliste zu erhalten, müssen Sie nur das erste Element des JSONArray suchen, wie Sie in this working example sehen können.

So entfernen Sie die for-Schleife und overview_polyline vom ersten Element erhalten:

JSONArray routeArray = jsonObject.getJSONArray("routes"); 
JSONObject routes = routeArray.getJSONObject(0); 
JSONObject overviewPolylines = routes.getJSONObject("overview_polyline"); 
String encodedString = overviewPolylines.getString("points"); 
polyLineList = decodePoly(encodedString); 

, die Pflege der häufigste Fall nehmen sollten, wo Sie erfolgreich Daten aus der Anfrage bekommen.

Nur um auf der sicheren Seite zu sein, wenn Sie immer mit einem LatLngBounds.Builder zu tun haben, sollten Sie sicherstellen, dass Sie einen nicht leeren Datensatz haben.
Dadurch wird sichergestellt, dass Sie nie die Illegal erhalten:

if (!polyLineList.isEmpty()) { 
    // Adjusting Bounds 
    LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
    for (LatLng latLng:polyLineList) { 
     builder = builder.include(latLng); 
    } 
    LatLngBounds bounds = builder.build(); 
    CameraUpdate mCameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds, 2); 
    mMap.animateCamera(mCameraUpdate); 
} 
+0

Danke für die Antwort. Ich habe versucht, was Sie vorgeschlagen haben, und es behebt das Problem, dass ich keinen Fehler bekomme, aber es setzt nicht die Markierung oder die Route zu dieser Adresse, es bleibt nur an der Stelle – LizG

+1

@LizG Stellen Sie sicher, dass Sie bekommen was Sie vom Server erwarten. Protokolliere 'response.body(). ToString()' und sieh, was drin ist. –

+0

Es gibt mir einen Fehler: Diese IP-Adresse, Website oder mobile Anwendung ist nicht berechtigt, diesen API-Schlüssel zu verwenden .. ANFORDERUNG VERWEIGERT .. Ich habe die Richtungen und Orte apis aktiviert. – LizG

Verwandte Themen