我有一个EditText,可以方便Google地图的自动填充。 它抛出了这个错误:
await must not be called on the UI thread.
在更改EditText中的文本时,将调用AutoCompletePlace API 我该如何解决这个问题?
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
GeoDataApi geoDataApi = Places.GeoDataApi;
PendingResult<AutocompletePredictionBuffer> autocompletePredictions = geoDataApi.
getAutocompletePredictions(GoogleClient.getIstance(), searchLoc.getText().toString(), null, null);
AutocompletePredictionBuffer autocompletePredictionBuffer= autocompletePredictions.await();
System.out.println("Size: " + autocompletePredictionBuffer.getCount());
for(int i=0; i<autocompletePredictionBuffer.getCount(); i++){
Place p= (Place) geoDataApi.
getPlaceById(GoogleClient.getIstance(), autocompletePredictionBuffer.get(i).getPlaceId());
searchList.add(
new SearchListProvider(
R.mipmap.ic_launcher,
autocompletePredictionBuffer.get(i).getFullText(null).toString(),
p)
);
}
}
catch (Exception e){
e.printStackTrace();
System.out.println("Message: "+e.getMessage());
Log.d("Message: ", e.getMessage());
}
Toast.makeText(getContext(), searchLoc.getText(), Toast.LENGTH_SHORT).show();
}
答案 0 :(得分:1)
我认为你应该在这里使用AsyncTask。因为await正在停止当前线程。因此,您应该将您的请求发送到工作线程中的API。然后你可以在onPostExecute()
中更新结果