Android, как заставить AutoCompleteTextView работать как окно поиска Google - PullRequest
5 голосов
/ 27 июня 2011

В моем приложении есть действие, которое расширяется MapActivity. и там я положил AutoCompleteTextView и кнопку под названием «Поиск», так что я пишу в AutoCompleteTextView И нажмите кнопку поиска, чтобы перейти в это место на карте Google. AutoCompleteTextView для небольшого количества элементов, которые я упоминаю в strings.xml . Но я хочу, чтобы она работала как поисковая система Google, как в окне поиска Google, что бы мы ни начинали писать, оно автоматически завершает каждое слово. Дело в том, что он берет данные с сервера Google. Не так ли? Если это так, то как я могу связать данные с моим AutoCompleteTextView с сервера Google, чтобы он работал как окно поиска Google. Я использую Android API v2.2.

1 Ответ

2 голосов
/ 04 декабря 2011

Вы должны использовать Google Places API, сначала необходимо сгенерировать ключ API места, проверьте эту страницу:

http://code.google.com/apis/maps/documentation/places/

В моем случае я использовал этот код:

 final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,R.layout.list_item);    
AutoCompleteTextView textView = (AutoCompleteTextView)   findViewById(R.id.autoCompleteTextView1);   
adapter.setNotifyOnChange(true);   
textView.setAdapter(adapter);   
textView.addTextChangedListener(new TextWatcher() {

   public void onTextChanged(CharSequence s, int start, int before, int count) {    if (count%3 == 1) {    adapter.clear();   try {

        URL googlePlaces = new URL(
        // URLEncoder.encode(url,"UTF-8");
                "https://maps.googleapis.com/maps/api/place/autocomplete/json?input="+ URLEncoder.encode(s.toString(), "UTF-8")
+"&types=geocode&language=fr&sensor=true&key=<getyourAPIkey>");
        URLConnection tc = googlePlaces.openConnection();
        Log.d("GottaGo", URLEncoder.encode(s.toString()));
        BufferedReader in = new BufferedReader(new InputStreamReader(
                tc.getInputStream()));

        String line;
        StringBuffer sb = new StringBuffer();
        while ((line = in.readLine()) != null) {
        sb.append(line);
        }
        JSONObject predictions = new JSONObject(sb.toString());            
        JSONArray ja = new JSONArray(predictions.getString("predictions"));

            for (int i = 0; i < ja.length(); i++) {
                JSONObject jo = (JSONObject) ja.get(i);
                adapter.add(jo.getString("description"));
            }


    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   }        

 }

public void beforeTextChanged(CharSequence s, int start, int count,   int after) {  // TODO Auto-generated method stub

   }

public void afterTextChanged(Editable s) {

} });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...