0

最初にクラウドからデータを取得してユーザーの電話のデータベースを更新するアプリがあります。データのダウンロード中に 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 );
   } 
4

1 に答える 1

0

でデータベースの更新を試みますonPostExecute。ではではなくdoInbackgroundを返し、ではこれを処理してデータベースを更新します。JSONObjectStringonPostExecuteJSONObject

于 2013-09-11T20:14:32.220 に答える