2013-01-07 18 views
7

Widziałem tutorial (tutorial), aby znaleźć miasto za pomocą autouzupełniania widok tekst w android.i zrobili wszystko, co jest pouczony, ale teraz, kiedy uderzę this urlmiejsce Google API dla Androida znaleźć miasto

zawsze rzuca mi wyjątek mówiąc: java.net.UnknownHostException: Unable to resolve host "maps.googleapis.com": No address associated with hostname

ale ten sam adres URL działa dobrze, gdy uderzę przez przeglądarkę i otrzymuję również wyniki.

Oto kod I m uderzenie:

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! Przepraszam chłopaki. Znalazłem rozwiązanie, które było głupim błędem. Nie zdefiniowałem uprawnienia INTERNET w manifeście.

+0

Mam również do czynienia z tym problemem i znalazłem odpowiedź tutaj http://stackoverflow.com/questions/9991616/how-to-get-parse-url-in-google-map-to-get-the-details- about-location-and-neighbo –

Odpowiedz

6

Proszę sprawdzić, czy w swoim manifeście dodano uprawnienia INTERNET.

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

Dodałem to pozwolenie, a następnie mam ten sam błąd, czy jest jakikolwiek problem w emulatorze –

+0

Zawsze rzeczywiste urządzenie użytkownika do mapy google, rozmowy telefoniczne, SMS, MMS, testowanie lokalizacji. –

+0

Dodałem pozwolenie do pliku Manifestu. Używam mojego telefonu jako urządzenia testowego i mam dobre połączenie z Wi-Fi ... ale problem nadal występuje ... czy możesz pomóc? @neo –

0

Ten błąd przydarzył mi się dzisiaj. Zorientowałem się, wykonując następujące kroki: 1: Sprawdź, czy dodasz uprawnienie INTERNET do manifestu.

2: Upewnij się, że Twój laptop lub urządzenie, na którym testujesz swoją aplikację, może uzyskać dostęp do Internetu.

FYI, podobnie jak w przypadku klucza do miejsc API, należy użyć "Klucz do aplikacji przeglądarki (z odrzucającymi)", a nie do aplikacji dla Androida.

Powodzenia.

Powiązane problemy