2013-04-27 74 views
0

我已經非常嚴格地使用本教程中的API實現了Google Places的自動完成功能 - https://developers.google.com/places/training/autocomplete-android。我的問題是,爲什麼這個工作沒有完成多線程工作 - 沒有任何異步任務或任何東西。不應該崩潰,因爲主線程有一個http請求? Here'e,我會覺得在應用程序會崩潰行 -Google Places Autocomplete API - 線程

conn = (HttpURLConnection) url.openConnection();

回答

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,然後將通過publishResults(CharSequence, android.widget.Filter.FilterResults)在 UI線程中發佈。