最初にクラウドからデータを取得してユーザーの電話のデータベースを更新するアプリがあります。データのダウンロード中に ProgressDialog を表示する AsyncTask を使用します。問題は、データがダウンロードされた後、ダイアログが消えた後にアクティビティを再開した場合にのみデータベースが更新されることです。これはちょっと醜いので、それを行うより良い方法があるかどうか知りたいです。
AsyncTask は次のとおりです。
class GetVersion extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ListClubs.this);
pDialog.setMessage(getString(R.string.updating));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* Getting product details in background thread
* */
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost updateCond = new HttpPost("http://website.com/update_db.php");
//update database
List<NameValuePair> nameValuePairs2 = new ArrayList<NameValuePair>();
nameValuePairs2.add(new BasicNameValuePair("version", Integer.toString(newVersion)));
try {
updateCond.setEntity(new UrlEncodedFormEntity(nameValuePairs2));
HttpResponse response2 = httpclient.execute(updateCond);
String jsonResult2 = inputStreamToString(response2.getEntity().getContent()).toString();
//saving the JSONObject
JSONObject object2 = new JSONObject(jsonResult2);
JSONArray conditions = object2.getJSONArray("conditions");
//saving the version
for(int i = 0; i < conditions.length(); i++){
JSONObject c = conditions.getJSONObject(i);
int condId = c.getInt("id");
String condMon = c.getString("mon");
db.updateCond(condId, condMon);
}
loginPrefsEditor.putBoolean("condBool", true);
loginPrefsEditor.commit();
Log.i("Update old version", Integer.toString(loginPreferences.getInt("oldV", -1)));
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
restartActivity();
} }
これは updateCond のコードです。
public int updateCond(int id, String newCond) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_COND, newCond);
// updating row
return db.update(TABLE_COND, values, KEY_ID+"="+id,null );
}