web-dev-qa-db-ja.com

場所のオートコンプリートAPIを特定の国の都市に制限android

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);

これについて何か考えはありますか?

13
Manoj

これを行う方法は、国を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

2。アドレスタイプとコンポーネントタイプ

3。Google Place API Autocomplete Service in Android Application

8
Y.S

これが私が使用した回避策(もしそうならハック)です。これは、文字列に変換されるときに、各応答項目がコンマ区切りの文字列であるという事実を利用(活用)します。結果をgetFilter()に返す前に、次の手順を実行します。

  1. 提案をArrayListに入れ、それをreturnedResultsと呼びます。
  2. 次に、returnedResultsをトラバースし、各反復でreturnedResults.get(i).getFullText(xxx).toString().split(",")を使用して各予測を文字列配列に取得します。
  3. この配列の最後の要素が国の名前である場合は、別のArrayList変数に挿入し、myResultと呼びましょう。
  4. myResultを返します。

個別の変数を使用する理由は、元の応答リストをそれほど簡単に操作できない可能性があるためです。このアプローチは魅力のように機能します!

お役に立てれば。

4
Abhishek Patel

国で結果をフィルタリングする

// Create Filter
AutocompleteFilter typeFilter = new AutocompleteFilter.Builder()
    .setCountry("AU")
    .build();
// Attach to autocomplete fragment / widget
autocompleteFragment.setFilter(typeFilter);
1
vijikumar
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は検索をエリアに制限します。

0
Rishabh Mahatha