这是我需要从结果 autocomlete API google places 中获取 onlt city 的代码:
MainActivity:
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());
适配器:
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;
}
这是我添加到 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<>();
}