2017-08-31 4 views
0

私はGoogleマップの場所の自動補完を容易にするEditTextを持っています。このエラーを投げ その:エラー:UIスレッドでAwaitを呼び出さないでください。

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

ここでは、AsyncTaskを使用してください。待機するのは現在のスレッドを停止させるためです。だからあなたはWorkerスレッドでAPIにリクエストを送るべきです。次に、onPostExecute()の結果を更新できます。

+0

AutocompletePredictionBuffer autocompletePredictionBuffer = autocompletePredictions.await();私は非同期タスクの中でこれを行うべきです。 –

+0

@ShubhamAgarwalBhewanewalaそれはすべての関連するロジックをdoInBackgroundに入れればOKです。 –

+0

私のアクティビティの 'onCreate()'メソッド内で 'OptionalPendingResult .await()'を呼び出すのと同様の問題がありました。これを 'AsyncTask'に移動することで問題は解決しました。 コンテキストについては、ユーザーとアプリケーションがどの状態にあるかを判断する一連のチェックを実行し、それらを正しいアクティビティに転送するアクティビティがあります。その一部は、 'await()'を使用する必要がある 'GoogleSignInApi.silentSignIn()'を使ったGoogleのサインインによるサイレント認証チェックでした。 –

関連する問題