Android 仅自动完成的城市

Android 仅自动完成的城市,android,autocomplete,google-api,Android,Autocomplete,Google Api,有人知道我如何过滤这个自动完成,那个用户只接收城市名称吗?只喜欢:伦敦、巴黎等,没有其他结果:“伦敦桥”、“伦敦眼”等——比如。 我在google places API中使用Autocomplete 所以我使用这个代码过滤器: public Filter getFilter() { Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSe

有人知道我如何过滤这个自动完成,那个用户只接收城市名称吗?只喜欢:伦敦、巴黎等,没有其他结果:“伦敦桥”、“伦敦眼”等——比如。 我在google places API中使用Autocomplete

所以我使用这个代码过滤器:

public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            synchronized (filterResults) {

                if (constraint != null) {
                    getAutocomplete(constraint);
                    result = mPlaceAPI.autocomplete(constraint.toString());

                    if (result != null) {
                        filterResults.values = result;
                        filterResults.count = result.size();
                    }
                }
                return filterResults;
要获得唯一的城市名称:

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("&types=(cities)");
        sb.append("&input=" + URLEncoder.encode(input, "utf8"));


非常感谢:)

我不知道您为什么要构建internet请求,但如果没有必要,您可以使用google Places API。 这是谷歌

在应用程序中,您只需执行几个步骤:

1) 构建并连接谷歌API客户端

googleApiClient = new GoogleApiClient.Builder(Activity.this)
            .addApi(Places.GEO_DATA_API)
            .build();
    googleApiClient.connect();
2) 然后您有几种方法可以做到:使用自动完成意图、放置自动完成片段或创建
pendingreult
然后我创建了Pendingreult

PendingResult<AutocompletePredictionBuffer> result
                        = Places
                        .GeoDataApi
                        .getAutocompletePredictions(googleApiClient, charSequence.toString(), null, builder.build());
pendingreult。

希望我能帮助你,如果我浪费了你的时间,我很抱歉。

我不知道你为什么要建立internet请求,但如果没有必要,你可以使用google Places API。 这是谷歌

在应用程序中,您只需执行几个步骤:

1) 构建并连接谷歌API客户端

googleApiClient = new GoogleApiClient.Builder(Activity.this)
            .addApi(Places.GEO_DATA_API)
            .build();
    googleApiClient.connect();
2) 然后您有几种方法可以做到:使用自动完成意图、放置自动完成片段或创建
pendingreult
然后我创建了Pendingreult

PendingResult<AutocompletePredictionBuffer> result
                        = Places
                        .GeoDataApi
                        .getAutocompletePredictions(googleApiClient, charSequence.toString(), null, builder.build());
pendingreult。

希望我能帮助你,如果我浪费了你的时间,我也很抱歉。

这是我的代码,我需要从结果AutoMLETE API google places获取onlt city: 主要活动:

 protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .build();

}

@Override
public void onConnected(Bundle bundle) {
}

@Override
public void onConnectionSuspended(int i) {
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}

public void searchPlace(final Editable editable) {

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (!editable.toString().equals("") && mGoogleApiClient.isConnected()) {
                try {
                    mAutoCompleteAdapter.getFilter().filter(editable.toString());

                } catch (Exception e) {
                    Log.e(TAG, "Exception");
另一个活动:PlaceAPI

 public 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("&types=(cities)");
        sb.append("&input=" + URLEncoder.encode(input, "utf8"));

        URL url = new URL(sb.toString());
        conn = (HttpURLConnection) url.openConnection();
        InputStreamReader in = new InputStreamReader(conn.getInputStream());
publicArrayList自动完成(字符串输入){
ArrayList resultList=null;
HttpURLConnection conn=null;
StringBuilder jsonResults=新建StringBuilder();
试一试{
StringBuilder sb=新的StringBuilder(PLACES\u API\u BASE+TYPE\u AUTOCOMPLETE+OUT\u JSON);
sb.追加(“?key=“+API_key”);
sb.append(“&types=(cities)”);
sb.append(“&input=“+urlcoder.encode”(输入,“utf8”));
URL=新URL(sb.toString());
conn=(HttpURLConnection)url.openConnection();
InputStreamReader in=新的InputStreamReader(conn.getInputStream());
适配器:

private ArrayList<String> result;


@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            synchronized (filterResults) {

                if (constraint != null) {
                    getAutocomplete(constraint);
                    result = mPlaceAPI.autocomplete(constraint.toString());

                    if (result != null) {
                        filterResults.values = result;
                        filterResults.count = result.size();
                    }
                }
                return filterResults;
            }
        }


        @Override
        protected void publishResults(CharSequence constraint, final FilterResults filterResults) {
            synchronized (filterResults) {

                mActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (filterResults != null && filterResults.count >= 0) {
                            mResultList = resultList;
                            notifyDataSetChanged();
                        } else {
                            notifyDataSetInvalidated();
                        }
                    }
                });

            }

        }
    };

    return filter;
}
私有数组列表结果;
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
已同步(filterResults){
if(约束!=null){
getAutocomplete(约束);
结果=mPlaceAPI.autocomplete(constraint.toString());
如果(结果!=null){
filterResults.values=结果;
filterResults.count=result.size();
}
}
返回过滤器结果;
}
}
@凌驾
受保护的void publishResults(CharSequence约束、最终FilterResults FilterResults){
已同步(filterResults){
mActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
如果(filterResults!=null&&filterResults.count>=0){
mResultList=resultList;
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
});
}
}
};
回流过滤器;
}
这是我添加到AutocompletePredictionBuffer中的内容:

 private ArrayList<PlaceAutocomplete> getAutocomplete(CharSequence constraint) {

    if (mGoogleApiClient.isConnected()) {

        PendingResult<AutocompletePredictionBuffer> results =
               Places.GeoDataApi.getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
                        mBounds, mPlaceFilter);


        AutocompletePredictionBuffer autocompletePredictions = results.await(60, TimeUnit.SECONDS);
        final Status status = autocompletePredictions.getStatus();

        if (!status.isSuccess()) {
            if (!mGoogleApiClient.isConnected()) {
                mGoogleApiClient.connect();
            }
            autocompletePredictions.release();

            return new ArrayList<>();
        }
private ArrayList getAutocomplete(字符序列约束){
if(mgoogleapClient.isConnected()){
Pendingreult结果=
Places.GeoDataApi.getAutocompletePredictions(mgoogleAppClient,constraint.toString(),
mBounds,mPlaceFilter);
AutocompletePredictionBuffer autocompletePredictions=结果。等待(60,时间单位。秒);
最终状态状态=自动完成预测。getStatus();
如果(!status.issucess()){
如果(!mgoogleapClient.isConnected()){
mGoogleApiClient.connect();
}
autocompletePredictions.release();
返回新的ArrayList();
}

这是我的代码,我需要从结果AutoMLETE API google places获取onlt city: 主要活动:

 protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .build();

}

@Override
public void onConnected(Bundle bundle) {
}

@Override
public void onConnectionSuspended(int i) {
}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}

public void searchPlace(final Editable editable) {

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (!editable.toString().equals("") && mGoogleApiClient.isConnected()) {
                try {
                    mAutoCompleteAdapter.getFilter().filter(editable.toString());

                } catch (Exception e) {
                    Log.e(TAG, "Exception");
另一个活动:PlaceAPI

 public 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("&types=(cities)");
        sb.append("&input=" + URLEncoder.encode(input, "utf8"));

        URL url = new URL(sb.toString());
        conn = (HttpURLConnection) url.openConnection();
        InputStreamReader in = new InputStreamReader(conn.getInputStream());
publicArrayList自动完成(字符串输入){
ArrayList resultList=null;
HttpURLConnection conn=null;
StringBuilder jsonResults=新建StringBuilder();
试一试{
StringBuilder sb=新的StringBuilder(PLACES\u API\u BASE+TYPE\u AUTOCOMPLETE+OUT\u JSON);
sb.追加(“?key=“+API_key”);
sb.append(“&types=(cities)”);
sb.append(“&input=“+urlcoder.encode”(输入,“utf8”));
URL=新URL(sb.toString());
conn=(HttpURLConnection)url.openConnection();
InputStreamReader in=新的InputStreamReader(conn.getInputStream());
适配器:

private ArrayList<String> result;


@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            synchronized (filterResults) {

                if (constraint != null) {
                    getAutocomplete(constraint);
                    result = mPlaceAPI.autocomplete(constraint.toString());

                    if (result != null) {
                        filterResults.values = result;
                        filterResults.count = result.size();
                    }
                }
                return filterResults;
            }
        }


        @Override
        protected void publishResults(CharSequence constraint, final FilterResults filterResults) {
            synchronized (filterResults) {

                mActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (filterResults != null && filterResults.count >= 0) {
                            mResultList = resultList;
                            notifyDataSetChanged();
                        } else {
                            notifyDataSetInvalidated();
                        }
                    }
                });

            }

        }
    };

    return filter;
}
私有数组列表结果;
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
已同步(filterResults){
if(约束!=null){
getAutocomplete(约束);
结果=mPlaceAPI.autocomplete(constraint.toString());
如果(结果!=null){
filterResults.values=结果;
filterResults.count=result.size();
}
}
返回过滤器结果;
}
}
@凌驾
受保护的void publishResults(CharSequence约束、最终FilterResults FilterResults){
已同步(filterResults){
mActivity.runOnUiThread(新Runnabl