Google商家信息自动填充API - 线程

时间:2013-04-27 07:39:00

标签: android http google-places-api

我已严格按照本教程使用API​​自动填写了Google地方信息 - https://developers.google.com/places/training/autocomplete-android。我的问题是,为什么没有进行多线程工作时这没有工作 - 没有asynchTasks或任何东西。应用程序不应该崩溃,因为主线程有一个http请求? 这是我认为该应用程序崩溃的行 -

conn = (HttpURLConnection) url.openConnection(); 

1 个答案:

答案 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)