package com.zhan_dui.dictionary.asynctasks; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; import android.content.Context; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.util.Log; import android.view.View; import android.widget.Toast; import com.viewpagerindicator.PageIndicator; import com.zhan_dui.dictionary.R; import com.zhan_dui.dictionary.datacenter.DictionaryDataCenter; import com.zhan_dui.dictionary.datacenter.QueryProcessor; import com.zhan_dui.dictionary.datacenter.QueryProcessor.QueryResult; import com.zhan_dui.dictionary.fragments.QueryWordFragment; /** * 负责查询的AsyncTask * * @author xuanqinanhai * */ public class QueryAsyncTask extends AsyncTask<Void, Object, Boolean> { private PageIndicator mPageIndicator; private PagerAdapter mPagerAdapter; private DictionaryDataCenter mDataCenter; private String mQueryWord; private static Context mContext; public final static int MSG_NO_USEFUL_DICTIONARY = 100; public final static int MSG_HAS_USEFUL_DICTIONARY = 200; public final static int MSG_NOT_FOUND_WORD = 300; private static QueryProcessor mQueryProcessor; public QueryAsyncTask(Context context, PageIndicator pageIndicator, PagerAdapter adapter, String queryWord) { mContext = context; mPagerAdapter = adapter; mQueryWord = queryWord; mPageIndicator = pageIndicator; mDataCenter = DictionaryDataCenter.instance(context); mQueryProcessor = QueryProcessor.instance(mContext); } @Override protected void onPreExecute() { super.onPreExecute(); if (mQueryProcessor.getDictionaryUsingCount() == 0) { // 如果开启了的字典个数为零 Message.obtain(QueryWordFragment.QueryMessageHandler, QueryAsyncTask.MSG_NO_USEFUL_DICTIONARY).sendToTarget(); cancel(false); } } @Override protected Boolean doInBackground(Void... params) { Boolean result = true; if (isCancelled()) { return true; } for (int i = 0; i < mQueryProcessor.getDictionaryUsingCount(); i++) { try { QueryResult queryResult = mQueryProcessor.query(mContext, mQueryWord, i, mQueryEventHandle); if (queryResult != null) { publishProgress(queryResult.getDictionaryName(), queryResult.getDictionaryView()); } } catch (ParserConfigurationException e) { result = false; e.printStackTrace(); } catch (SAXException e) { result = false; e.printStackTrace(); } catch (IOException e) { result = false; e.printStackTrace(); } } return result; } @Override protected void onProgressUpdate(Object... values) { super.onProgressUpdate(values); Log.i("Lin", "get " + (String) values[0]); mDataCenter.addDictionaryView((String) values[0], (View) values[1]); mPagerAdapter.notifyDataSetChanged(); mPageIndicator.notifyDataSetChanged(); } private static Handler mQueryEventHandle = new Handler() { public void handleMessage(Message msg) { if (msg.what == QueryProcessor.MSG_WORD_NOT_EXISIT) { Toast.makeText(mContext, R.string.no_this_word, Toast.LENGTH_LONG).show(); } }; }; }