我已严格按照本教程使用API自动填写了Google地方信息 - https://developers.google.com/places/training/autocomplete-android。我的问题是,为什么没有进行多线程工作时这没有工作 - 没有asynchTasks或任何东西。应用程序不应该崩溃,因为主线程有一个http请求? 这是我认为该应用程序崩溃的行 -
conn = (HttpURLConnection) url.openConnection();
答案 0 :(得分:5)
网络呼叫在Filter.performFiltering
方法内执行:
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults filterResults = new FilterResults();
if (constraint != null) {
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
filterResults.values = resultList;
filterResults.count = resultList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
notifyDataSetChanged();
}
else {
notifyDataSetInvalidated();
}
}};
return filter;
}
从文档中可以看出,Filter.performFiltering()
方法在工作线程中执行:
在工作线程中调用以根据数据过滤数据 约束。子类必须实现此方法才能执行 过滤操作。必须通过过滤操作计算结果 以
Filter.FilterResults
的形式返回,然后发布 UI线程通过publishResults(CharSequence, android.widget.Filter.FilterResults)
。