2016-11-11 11 views
0

私はアプリを開発中です。ユーザーが文字を入力するときにいくつかの都市名を提案したい..myコードはGoogle place auto completeが機能しない

public class GooglePlacesAutocomplete extends MainActivity implements OnItemClickListener { 

    Button btcancel; 
    Button btsearch; 

    private static final String LOG_TAG = "GameDayWeather"; 

    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 = "AIzaSyAU9ShujnIg3IDQxtPr7Q1qOvFVdwNmWc4"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.search_city); 
     AutoCompleteTextView autoCompView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView); 

     autoCompView.setAdapter(new GooglePlacesAutocompleteAdapter(this, R.layout.list_item)); 
     autoCompView.setOnItemClickListener(this); 
     btsearch = (Button) findViewById(R.id.search); 
     btcancel = (Button) findViewById(R.id.cancel); 

     btcancel.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent myint = new Intent(GooglePlacesAutocomplete.this, MainActivity.class); 
       startActivity(myint); 
       finish(); 
      } 
     }); 
    } 

    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
     String str = (String) adapterView.getItemAtPosition(position); 
     Toast.makeText(this, str, Toast.LENGTH_SHORT).show(); 
    } 

    public static 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("?key=" + API_KEY); 
      sb.append("&components=country:in"); 
      sb.append("&input=" + URLEncoder.encode(input, "utf8")); 

      URL url = new URL(sb.toString()); 

      System.out.println("URL: "+url); 
      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) { 
      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++) { 
       System.out.println(predsJsonArray.getJSONObject(i).getString("description")); 
       System.out.println("=================================="); 
       resultList.add(predsJsonArray.getJSONObject(i).getString("description")); 
      } 
     } catch (JSONException e) { 
      Log.e(LOG_TAG, "Cannot process JSON results", e); 
     } 

     return resultList; 
    } 

    class GooglePlacesAutocompleteAdapter extends ArrayAdapter<String> implements Filterable { 
     private ArrayList<String> resultList; 

     public GooglePlacesAutocompleteAdapter(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 auto complete 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; 
     } 
    } 

} 

私のコードはうまくいきます。私は都市名の2つのチャーを入力するときそれは示唆を示しますが、3番目の文字を入力した後、提案は表示されません。 Logcatにエラーはありません。あなたのXMLで

答えて

1

設定

android:completionThreshold="1" 

<AutoCompleteTextView 
android:id="@+id/your_id" 
//your other properties 

android:completionThreshold="1" /> 

またはプログラムそんなに

autoCompView.setThreshold(1); 
+0

感謝を設定します。今働いている。 –

+0

ようこそ。ハッピーコーディング... – sasikumar

+0

もう一度動作しません。私はxmlにしきい値を追加しました。しかし、今では同じ問題があります。お願いします。 –

関連する問題