我正在实现通过一些REST API的自动完成建议功能(实际上是Nokia Here Geocoder Autocomplete API,但这并不重要)。我为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"
部分在线程池中运行。如果我以同步方式获取自动完成结果,则它可以正常工作。例如,我可以使用 HttpURLConnection
和 InputStream
- 所有同步阻塞调用都可以在这里很好地工作。但是,如果我需要在此处调用一些以异步方式操作的 API,例如通过回调或监听器,该怎么办呢?
如何在 performFiltering 中调用这样的内容?
request.execute(
new ResultListener<List<com.here.android.mpa.search.Location>>() {
@Override
public void onCompleted(List<Location> locations, ErrorCode errorCode) {
}
//...
}
当回调函数没有返回结果时,我该如何推迟方法的返回?
提前感谢您的帮助。