Android如何谷歌搜索,android – 如何从谷歌地方检索搜索建议?

这是我遇到类似问题时使用的代码片段.

这是我的PlacesAutoCompleteAdapter.java文件.

package com.inukshk.adapter;

import java.util.ArrayList;

import android.content.Context;

import android.widget.ArrayAdapter;

import android.widget.Filter;

import android.widget.Filterable;

import com.inukshk.CreateInukshk.CreateInukshk;

public class PlacesAutoCompleteAdapter extends ArrayAdapter implements

Filterable {

private ArrayList resultList;

public PlacesAutoCompleteAdapter(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 autocomplete results.

resultList = CreateInukshk.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;

}

}

这是您在活动的OnCreate()中必须做的事情.

autoCompView = (AutoCompleteTextView) findViewById(R.id.editloc);

autoCompView.setAdapter(new PlacesAutoCompleteAdapter(this,

R.layout.list_item));

这是我在app中使用的静态字符串.

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 = "YOUR API KEY";

最后,这是您将在Adapter中使用的方法.

public static ArrayList autocomplete(String input) {

ArrayList resultList = null;

HttpURLConnection conn = null;

StringBuilder jsonResults = new StringBuilder();

try {

StringBuilder sb = new StringBuilder(PLACES_API_BASE

+ TYPE_AUTOCOMPLETE + OUT_JSON);

sb.append("?sensor=false&key=" + API_KEY);

// sb.append("&components=country:uk");

sb.append("&input=" + URLEncoder.encode(input, "utf8"));

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

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(TAG, "Error processing Places API URL", e);

return resultList;

} catch (IOException e) {

Log.e(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(predsJsonArray.length());

for (int i = 0; i < predsJsonArray.length(); i++) {

resultList.add(predsJsonArray.getJSONObject(i).getString(

"description"));

}

} catch (JSONException e) {

Log.e(TAG, "Cannot process JSON results", e);

}

return resultList;

}

我猜你已经指定了list_item.xml,如下所示.

android:layout_width="wrap_content" android:layout_height="wrap_content" />

试试看.希望它能帮到你.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值