2016-05-08 3 views
0

Ich möchte den Wert administrative_area_level_1 als Status, locality Wert als Bereich und formatted_address Wert als Adresse für die weitere Verwendung abrufen. Ich benutze die Google Maps API, wo ich den Längen- und Breitengrad gebe und es gibt das JSON-Objekt zurück, das die gewünschten Daten enthält.ANDROID JSON Spezifischen Wert von JSON-Daten abrufen

Unten ist das Beispiel der URL, die ich verwende, um die Daten mit dem Teil des Ergebnisses abzurufen, das ich möchte.

http://maps.google.com/maps/api/geocode/json?latlng=1.56406166666667,103.626493333333&sensor=true

{ 
     "results" : [ 
      { 
      "address_components" : [ 
       { 
        "long_name" : "Jalan Cengal", 
        "short_name" : "Jalan Cengal", 
        "types" : [ "route" ] 
       }, 
       { 
        "long_name" : "Johor Bahru", 
        "short_name" : "Johor Bahru", 
        "types" : [ "locality", "political" ] 
       }, 
       { 
        "long_name" : "Johor", 
        "short_name" : "Johor", 
        "types" : [ "administrative_area_level_1", "political" ] 
       }, 
       { 
        "long_name" : "Malaysia", 
        "short_name" : "MY", 
        "types" : [ "country", "political" ] 
       }, 
       { 
        "long_name" : "80990", 
        "short_name" : "80990", 
        "types" : [ "postal_code" ] 
       } 
      ], 
      "formatted_address" : "Jalan Cengal, 80990 Johor Bahru, Johor, Malaysia", 
...... 

So zunächst das ist meine Codierung der Daten Ich möchte abzurufen.

private void extractPosition(JSONObject json) 
{ 
    JSONObject result = json.optJSONArray("results").optJSONObject(0); 
    JSONArray address_components = result.optJSONArray("address_components"); 

    area.setText(address_components.optJSONObject(1).optString("short_name")); 

    state.setText(address_components.optJSONObject(2).optString("short_name")); 

    address.setText(result.optString("formatted_address")); 
} 

Aber dann merke ich die Position nicht immer gleich sein wird, weil einige Koordinaten wie die zusätzlichen Informationen haben unten, so kann ich nicht auf die Position der Daten verlassen.

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Jalan Kebudayaan 11", 
       "short_name" : "Jalan Kebudayaan 11", 
       "types" : [ "route" ] 
      }, 
      { 
       "long_name" : "Taman Universiti", 
       "short_name" : "Taman Universiti", 
       "types" : [ "sublocality_level_1", "sublocality", "political" ] 
      }, 
      { 
       "long_name" : "Skudai", 
       "short_name" : "Skudai", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Johor", 
       "short_name" : "Johor", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Malaysia", 
       "short_name" : "MY", 
       "types" : [ "country", "political" ] 
      }, 
      { 
       "long_name" : "81300", 
       "short_name" : "81300", 
       "types" : [ "postal_code" ] 
      } 
     ], 
     "formatted_address" : "Jalan Kebudayaan 11, Taman Universiti, 81300 Skudai, Johor, Malaysia", 
..... 

Wie soll ich ändern meine Codierung, damit ich die administrative_area_level_1 und locality Werte abrufen?

Antwort

0
private void extractPosition(JSONObject json) 
    { 
     JSONObject result = json.optJSONArray("results").optJSONObject(0); 
     JSONArray address_components = result.optJSONArray("address_components"); 

     for (int i =0; i<address_components.length();i++) 
     { 
      String searchKeyword; 

      searchKeyword = address_components.optJSONObject(i).optString("types"); 
      Log.d("test", searchKeyword); 

      if (searchKeyword.contains("locality")) 
      { 
       area.setText(address_components.optJSONObject(i).optString("short_name")); 
      } 

      if (searchKeyword.contains("administrative_area_level_1")) 
      { 
       state.setText(address_components.optJSONObject(i).optString("short_name")); 
      } 
     } 

     address.setText(result.optString("formatted_address")); 
    } 
0
private void extractPosition(JSONObject json) 
{ 
    JSONObject result = json.optJSONArray("results").optJSONObject(0); 
    JSONArray address_components = result.optJSONArray("address_components"); 

    for (int i =0; i<address_components.lenght;i++){ 

     if(address_components.optJSONObject(1).optString("short_name").equals("locality")) 
     area.setText(address_components.optJSONObject(1).optString("short_name")); 

     if (address_components.optJSONObject(1).optString("short_name").equals("administrative_area_level_1")) 
     state.setText(address_components.optJSONObject(2).optString("short_name")); 

     address.setText(result.optString("formatted_address")); 
} 
} 
+0

nicht berufstätig, bekam nur den Adresswert. –

Verwandte Themen