Play開発者サービスのPlaceAutocompleteApi
を使用しています。オートコンプリートを特定の国と都市のみに制限したいのですが、例えば。からのすべての都市は、インドだけを言うことができます。 AutocompleteFilter
を使用していますが、制限する国をどこで指定すればよいかわかりません。
これが私のコードです
List<Integer> autocompleteFilter = new ArrayList<>();
// autocompleteFilter.add(Place.TYPE_COUNTRY);
// autocompleteFilter.add(Place.TYPE_LOCALITY);
mAdapter = new PlaceAutocompleteAdapter(mContext,R.layout.layout_location_text,
mGoogleApiClient, BOUNDS, AutocompleteFilter.create(autocompleteFilter));
mTxtLocation.setAdapter(mAdapter);
mTxtLocation.setOnItemClickListener(mAutocompleteClickListener);
これについて何か考えはありますか?
これを行う方法は、国をcomponents
パラメーターとしてWebサービスのURLに追加することです。
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&components=country:in");
都市の場合は、administrative_area_level_3
タグのいずれかを使用できます。
sb.append("&components=administrative_area_level_3:bengaluru");
または、locality
タグ:
sb.append("&components=locality:redmond");
参照:
1。ジオコーディングAPI 。
3。Google Place API Autocomplete Service in Android Application 。
これが私が使用した回避策(もしそうならハック)です。これは、文字列に変換されるときに、各応答項目がコンマ区切りの文字列であるという事実を利用(活用)します。結果をgetFilter()
に返す前に、次の手順を実行します。
ArrayList
に入れ、それをreturnedResults
と呼びます。returnedResults
をトラバースし、各反復でreturnedResults.get(i).getFullText(xxx).toString().split(",")
を使用して各予測を文字列配列に取得します。ArrayList
変数に挿入し、myResult
と呼びましょう。myResult
を返します。個別の変数を使用する理由は、元の応答リストをそれほど簡単に操作できない可能性があるためです。このアプローチは魅力のように機能します!
お役に立てれば。
国で結果をフィルタリングする
// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
.setCountry("AU")
.build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);
val sb = StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON)
sb.append("?key=$API_KEY")
sb.append("&types=establishment")
sb.append("&location=$locationLat,$LocationLng")
sb.append("&radius=50000&strictbounds")
sb.append("&input=" + URLEncoder.encode(input, "utf8"))
このAPIは検索をエリアに制限します。