And*_*rov 4 android autocompletetextview
我致力于通过一些 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;
}
//...
}
//...
}
Run Code Online (Sandbox Code Playgroud)
据我了解,部分"obtain some autocomplete data"在线程池中运行。如果我以同步方式获得自动完成的结果 - 它的工作。例如,我可以使用HttpURLConnection和InputStream- 所有同步阻塞调用在这里工作得很好。
但是如果我需要在这里调用一些以异步方式运行的 API,比如通过 Callback\Listener 呢?
我怎样才能在 performFiltering 中调用这样的东西?
request.execute(
new ResultListener<List<com.here.android.mpa.search.Location>>() {
@Override
public void onCompleted(List<Location> locations, ErrorCode errorCode) {
}
//...
}
Run Code Online (Sandbox Code Playgroud)
如何在回调不给我结果的情况下推迟从方法返回?
提前致谢,
您可以让线程在 performFiltering 方法中等待来自异步 API 的结果,直到收到响应。
由于方法 performFiltering 在工作线程中运行,您可以让线程等待结果,如下所示,lockTwo 是 object 和 placeResults 布尔指标。
while (!placeResults) {
synchronized (lockTwo) {
try {
lockTwo.wait();
} catch (InterruptedException e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
在回调或监听器中,一旦响应被处理,添加如下所示的通知。
placeResults = true;
synchronized (lockTwo) {
lockTwo.notifyAll();
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以在http://www.zoftino.com/google-places-auto-complete-android查看地点自动搜索示例
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |