2013-01-07 22 views
7

Tôi đã thấy các hướng dẫn (tutorial) để tìm thành phố sử dụng autocomplete xem văn bản trong android.i đã làm tất cả những gì được hướng dẫn nhưng bây giờ khi tôi nhấn this urlGoogle nơi API for android để tìm thành phố

nó luôn luôn ném cho tôi một ngoại lệ cho biết: java.net.UnknownHostException: Unable to resolve host "maps.googleapis.com": No address associated with hostname

nhưng cùng một url hoạt động tốt khi tôi nhấn qua trình duyệt và tôi cũng nhận được kết quả.

Đây là mã tôi đang đánh với:

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! xin lỗi các bạn. Tôi đã tìm thấy giải pháp đó là một sai lầm ngớ ngẩn. Tôi đã không xác định quyền INTERNET trong tệp kê khai.

+0

Tôi cũng phải đối mặt với vấn đề này và tìm thấy câu trả lời ở đây http://stackoverflow.com/questions/9991616/how-to-get-parse-url-in-google-map-to-get-the-details- about-location-and-neighbo –

Trả lời

6

Vui lòng kiểm tra xem bạn đã thêm quyền INTERNET vào tệp kê khai chưa.

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

Tôi đã thêm quyền này rồi tôi cũng gặp lỗi này, có vấn đề gì trong Emulator –

+0

Luôn sử dụng thiết bị thực cho bản đồ google, cuộc gọi điện thoại, sms, mms, kiểm tra vị trí. –

+0

Tôi đã thêm quyền trong tệp kê khai của mình .. Tôi đang sử dụng điện thoại làm thiết bị thử nghiệm và tôi cũng kết nối với wifi ... nhưng sự cố vẫn tiếp diễn ... bạn có thể trợ giúp không? @neo –

0

Lỗi này xảy ra với tôi hôm nay. Tôi đã tìm ra bằng cách làm theo các bước sau: 1: Kiểm tra xem bạn có thêm quyền INTERNET trong tệp kê khai hay không.

2: Đảm bảo rằng máy tính xách tay hoặc thiết bị bạn đang thử nghiệm ứng dụng của mình có thể truy cập internet.

FYI, đối với khóa API địa điểm, bạn nên sử dụng "Key cho các ứng dụng trình duyệt (có tham chiếu)", chứ không phải Khóa cho ứng dụng Android.

Chúc may mắn.

Các vấn đề liên quan