错误:不得在UI线程上调用Await

时间:2017-08-31 16:56:24

标签: android google-maps

我有一个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();
        }

1 个答案:

答案 0 :(得分:1)

我认为你应该在这里使用AsyncTask。因为await正在停止当前线程。因此,您应该将您的请求发送到工作线程中的API。然后你可以在onPostExecute()

中更新结果