2013-01-07 2 views
7

Ich habe das Tutorial gesehen (tutorial), um die Stadt mit dem automatischen Vervollständigung Textansicht in android.i zu finden hat alles getan, was angewiesen, aber jetzt, wenn ich this url getroffenGoogle Ort API für Android finden Stadt

es immer wirft mir eine Ausnahme sagen: java.net.UnknownHostException: Unable to resolve host "maps.googleapis.com": No address associated with hostname

aber die gleiche URL funktioniert gut, wenn ich durch den Browser und ich bin auch die Ergebnisse bekommen.

Hier ist der Code, den ich mit Schlagen m:

public class PlacesAutoCompleteAdapter extends ArrayAdapter<String> implements Filterable{ 
private ArrayList<String> resultList; 
private static final String LOG_TAG = "ExampleApp"; 

private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place"; 
private static final String TYPE_AUTOCOMPLETE = "/autocomplete"; 
private static final String OUT_JSON = "/json"; 

private static final String API_KEY = "I have generated the correct api key also"; 


public PlacesAutoCompleteAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 

} 


@Override 
public int getCount() { 
    return resultList.size(); 
} 

@Override 
public String getItem(int index) { 
    return resultList.get(index); 
} 

@Override 
public Filter getFilter() { 
    Filter filter = new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults filterResults = new FilterResults(); 
       if (constraint != null) { 
        // Retrieve the autocomplete results. 
        resultList = autocomplete(constraint.toString()); 

        // Assign the data to the FilterResults 
        filterResults.values = resultList; 
        filterResults.count = resultList.size(); 
       } 
       return filterResults; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, 
       FilterResults results) { 
      if (results != null && results.count > 0) { 
        notifyDataSetChanged(); 
       } 
       else { 
        notifyDataSetInvalidated(); 
       } 
     } 
    }; 
    return filter; 
} 

private ArrayList<String> autocomplete(String input) { 
    ArrayList<String> resultList = null; 

    HttpURLConnection conn = null; 
    StringBuilder jsonResults = new StringBuilder(); 
    try { 
     StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON); 
     sb.append("?sensor=false&key=" + API_KEY); 
    // sb.append("&components=country:in"); 
     sb.append("&input=" + URLEncoder.encode(input, "utf8")); 
     // sb.append("&input=" + input); 

     System.out.println("URL ---------------: "+sb.toString()); 
     URL url = new URL(sb.toString()); 
     conn = (HttpURLConnection) url.openConnection(); 
     InputStreamReader in = new InputStreamReader(conn.getInputStream()); 

     // Load the results into a StringBuilder 
     int read; 
     char[] buff = new char[1024]; 
     while ((read = in.read(buff)) != -1) { 
      jsonResults.append(buff, 0, read); 
     } 
    } catch (MalformedURLException e) { 
     Log.e(LOG_TAG, "Error processing Places API URL", e); 
     return resultList; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     // Log.e(LOG_TAG, "Error connecting to Places API", e); 
     return resultList; 
    } finally { 
     if (conn != null) { 
      conn.disconnect(); 
     } 
    } 

    try { 
     // Create a JSON object hierarchy from the results 
     JSONObject jsonObj = new JSONObject(jsonResults.toString()); 
     JSONArray predsJsonArray = jsonObj.getJSONArray("predictions"); 

     // Extract the Place descriptions from the results 
     resultList = new ArrayList<String>(predsJsonArray.length()); 
     for (int i = 0; i < predsJsonArray.length(); i++) { 
      resultList.add(predsJsonArray.getJSONObject(i).getString("description")); 
     } 
    } catch (JSONException e) { 
     Log.e(LOG_TAG, "Cannot process JSON results", e); 
    } 

    return resultList; 
} 

}


oops! Tut mir leid, Leute. Ich habe die Lösung gefunden, die ein dummer Fehler war. Ich hatte die INTERNET-Berechtigung im Manifest nicht definiert.

+0

Ich stelle auch dieses Problem und die Antwort hier gefunden http://StackOverflow.com/Questions/9991616/How-to-get-parse-url-in-google-map-to-get-the-details- about-location-and-neighbour –

Antwort

6

Überprüfen Sie, ob Sie in Ihrem Manifest INTERNET-Berechtigung hinzugefügt haben.

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
+1

Ich habe diese Erlaubnis dann auch ich habe denselben Fehler hinzugefügt, gibt es ein Problem in Emulator –

+0

Immer Benutzer echtes Gerät für Google Map, Telefonanrufe, SMS, MMS, Standort testen. –

+0

Ich habe die Erlaubnis in meiner Manifest-Datei hinzugefügt .. Ich benutze mein Telefon als Testgerät und ich bin gut mit WLAN verbunden ... noch besteht das Problem weiter ... können Sie helfen? @Neo –

0

Dieser Fehler ist mir heute passiert. Ich habe es durch Ausführen dieser Schritte herausgefunden: 1: Überprüfen Sie, dass Sie die INTERNET-Berechtigung in Manifest hinzufügen.

2: Stellen Sie sicher, dass Ihr Laptop oder das Gerät, auf dem Sie Ihre App testen, auf das Internet zugreifen können.

FYI, wie für den Schlüssel für Orte API, sollten Sie verwenden "Key für Browser-Apps (mit Referrer)", nicht der Schlüssel für Android-Apps.

Viel Glück.