2017-02-08 14 views
2

私はいくつかのREST API(実際はNokia Here Geocoder Autocomplete APIですが、それほど重要ではない)を介してオートコンプリート提案の実装に取り​​組んでいます。 AutoCompleteTextViewのカスタムアダプターを書いています。コールバック付きの非同期API用Android AutocompleteTextViewアダプタ

public class GeoAutocompleteAdapter extends BaseAdapter implements Filterable { 

@Override 
public Filter getFilter() { 
    Filter filter = new Filter() { 

     @Override 
     protected Filter.FilterResults performFiltering(CharSequence constraint) { 
      FilterResults filterResults = new FilterResults(); 

      // obtain some autocomplete data 

      filterResults.values = res; 
      filterResults.count = res.size(); 
      return filterResults; 
     } 
     //... 
     } 
//... 
} 

私が理解する限り、セクション"obtain some autocomplete data"はスレッドプールで実行されます。私が同期的な方法で自動完成の結果を得るなら、その作業。たとえば、HttpURLConnectionInputStreamを使用できます。すべての同期ブロッキング呼び出しがここでうまく機能します。

しかし、コールバック\リスナーのように非同期で動作するAPIをここで呼び出す必要がある場合はどうなりますか?

performFilteringでこのように呼び出すにはどうすればよいですか?

request.execute(
     new ResultListener<List<com.here.android.mpa.search.Location>>() { 
      @Override 
      public void onCompleted(List<Location> locations, ErrorCode errorCode) { 

      } 
     //... 
     } 

コールバック中にメソッドからの返送を延期すると、結果が得られません。

事前のおかげで、

+0

で検索例の自動場所を確認することができます詳細については

 placeResults = true; synchronized (lockTwo) { lockTwo.notifyAll(); } 

あなたはhttp://stackoverflow.com/questions/2671404/autocompletetextview-not-displaying-result-even-で見たいと思うかもしれませんアレイアダプターが更新されたとき –

答えて

0

あなたは、応答が受信されるまでスレッドがperformFiltering方法で非同期APIからの結果を待つことができます。

メソッドperformFilteringはワーカースレッドで実行されるため、スレッドは次のように結果を待つことができます。lockTwoはobjectおよびplaceResultsブールインジケータです。

 while (!placeResults) { 
      synchronized (lockTwo) { 
       try { 
        lockTwo.wait(); 
       } catch (InterruptedException e) { 

       } 
      } 
     } 

コールバックまたはリスナーでは、応答が処理された後、次のように通知を追加します。あなたはhttp://www.zoftino.com/google-places-auto-complete-android

関連する問題