package net.dev123.yibo.service.task; import java.util.List; import net.dev123.commons.Paging; import net.dev123.exception.LibException; import net.dev123.mblog.MicroBlog; import net.dev123.yibo.SearchActivity; import net.dev123.yibo.YiBoApplication; import net.dev123.yibo.common.Constants; import net.dev123.yibo.common.GlobalVars; import net.dev123.yibo.common.ResourceBook; import net.dev123.yibo.service.adapter.StatusSearchResultAdapter; import net.dev123.yibo.service.adapter.UserSearchResultAdapter; import android.os.AsyncTask; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.Toast; public class SearchTask extends AsyncTask<Void, Void, List> { enum SearchType { Statuses, Users } private SearchActivity context; private ArrayAdapter adapter; private Paging paging; private String keyword; private String message; private SearchType type; public SearchTask(SearchActivity context, Paging paging, String keyword, ArrayAdapter adapter) { this.context = context; this.adapter = adapter; this.paging = paging; this.keyword = keyword; if (adapter instanceof StatusSearchResultAdapter) { type = SearchType.Statuses; } else if (adapter instanceof UserSearchResultAdapter) { type = SearchType.Users; } } @Override protected void onPreExecute() { context.showLoadingFooter(); } @Override protected List doInBackground(Void... params) { if (adapter == null) { return null; } YiBoApplication yibo = (YiBoApplication)context.getApplication(); MicroBlog microBlog = GlobalVars.getMicroBlog(yibo.getCurrentAccount()); if (microBlog == null) { return null; } List searchResult = null; if (paging.moveToNext()) { try { if (type == SearchType.Statuses) { searchResult = microBlog.searchStatuses(keyword, paging); } else if (type == SearchType.Users) { searchResult = microBlog.searchUsers(keyword, paging); } } catch (LibException e) { if (Constants.DEBUG) Log.e("SearchTask", e.getMessage(), e); message = ResourceBook.getStatusCodeValue(e.getExceptionCode(), context); } } // if (searchResult != null && // searchResult.size() > 0 && // searchResult.get(0) instanceof net.dev123.mblog.entity.Status) { // Util.getResponseCounts((List<net.dev123.mblog.entity.Status>)searchResult, microBlog); // } return searchResult; } @Override protected void onPostExecute(List result) { if (result != null && result.size() > 0) { for (int i = 0; i < result.size(); i++) { adapter.add(result.get(i)); } adapter.notifyDataSetChanged(); } else { if (message != null) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } } if (paging.hasNext()) { context.showMoreFooter(); } else { context.showNoMoreFooter(); } } }