這是我的代碼,我需要從結果autocomlete API谷歌的地方onlt城市: 在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<>();
}
來源
2017-10-13 08:21:37
Bon
@你在這裏有一些錯誤?如果不是,你可以把斷點放在你想從結果中獲取數據並觀察這裏的情況嗎?並確保您以正確的方式連接GoogleApiClient。 –
我沒有得到一個錯誤消息,我把斷點,他給我,過濾器正在做..但我還是沒有得到只有城市的過濾器..我不知道我想念什麼,我應該做什麼.. – Bon
@Bon過濾器工作良好,我的意思是把破發點中的回調並觀看結果,你得到 –