package com.zhan_dui.dictionary.asynctasks; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.AsyncTask; import android.view.View; import android.widget.ListView; import com.devspark.appmsg.AppMsg; import com.zhan_dui.dictionary.R; import com.zhan_dui.dictionary.cursoradapters.OnlineListCursorAdapter; import com.zhan_dui.dictionary.db.DictionaryDB; import com.zhan_dui.dictionary.db.DictionaryManager; import com.zhan_dui.dictionary.utils.Constants; import com.zhan_dui.dictionary.utils.JsonGetter; public class GetOnlineDictionaryAsyncTask extends AsyncTask<Void, Void, Boolean> { private ListView mDictionaryList; private View mWaittingView; private Context mContext; private Boolean mResult; private SQLiteDatabase mSqliteDatabase; public GetOnlineDictionaryAsyncTask(View view) { mContext = view.getContext(); mDictionaryList = (ListView) view.findViewById(android.R.id.list); mWaittingView = view.findViewById(android.R.id.empty); } @Override protected void onPreExecute() { super.onPreExecute(); mWaittingView.setVisibility(View.VISIBLE); mSqliteDatabase = new DictionaryDB(mContext, DictionaryDB.DB_NAME, null, DictionaryDB.DB_VERSION).getReadableDatabase(); } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); mWaittingView.setVisibility(View.GONE); if (mResult) { AppMsg.makeText((Activity) mContext, mContext.getString(R.string.get_update_success), AppMsg.STYLE_INFO).show(); } else { AppMsg.makeText((Activity) mContext, mContext.getString(R.string.get_update_failed), AppMsg.STYLE_ALERT).show(); } Cursor cursor = mSqliteDatabase .rawQuery( "select * from dictionary_list where dictionary_downloaded <> '1'", null); OnlineListCursorAdapter onlineListCursorAdapter = new OnlineListCursorAdapter( mContext, cursor); mDictionaryList.setAdapter(onlineListCursorAdapter); mSqliteDatabase.close(); } @Override protected Boolean doInBackground(Void... params) { try { String jsonString = JsonGetter .get(Constants.ONLINE_DICTIONARY_LIST_URL); ParseJson(jsonString); mResult = true; } catch (Exception e) { e.printStackTrace(); mResult = false; } finally { } return mResult; } @Override protected void onCancelled() { super.onCancelled(); mResult = false; mWaittingView.setVisibility(View.GONE); } public void ParseJson(String json) throws JSONException { JSONArray jsonArray = new JSONArray(json); String name, size, url, save_name; JSONObject jsonObject; DictionaryDB dictionaryDB = new DictionaryDB(mContext, DictionaryDB.DB_NAME, null, DictionaryDB.DB_VERSION); SQLiteDatabase sqLiteDatabase = dictionaryDB.getWritableDatabase(); Cursor cursor = sqLiteDatabase.rawQuery( "select count(*) from dictionary_list", null); cursor.moveToFirst(); int dictionaryCount = cursor.getInt(cursor.getColumnIndex("count(*)")); for (int i = 0; i < jsonArray.length(); i++) { jsonObject = jsonArray.getJSONObject(i); name = jsonObject.getString("dictionary_name"); size = jsonObject.getString("dictionary_size"); url = jsonObject.getString("dictionary_url"); save_name = jsonObject.getString("dictionary_save_name"); DictionaryManager.getInstance(mContext).addAnDictionaryToDB(name, save_name, url, size, true, ++dictionaryCount); } sqLiteDatabase.close(); } }