2016-08-10 3 views
0

私のアプリケーションで私は非同期でAlertDialogを使用しています。しかし、データがデータベースに保存されている時点でフリーズします。私はそれを実行し続けるために何ができますか?いつか完全に実行されますが、データベースにアクセスすると特定の時間が経過すると停止します。データベースにデータを保存するとAndroid AlertDialogがフリーズする

class BackGroundTasks extends AsyncTask<String, String, Void> { 
@Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     if (dialog == null) { 
      dialog = ProgressDialog.show(mActivity, null, 
        "Please wait ...", true); 

     } 

    } 
    @Override 
    protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     CheckInternetConnection internet = new CheckInternetConnection(
       mActivity); 
     if (!internet.HaveNetworkConnection()) { 
      return null; 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) { 

     super.onPostExecute(result); 
     try { 
      CheckInternetConnection internet = new CheckInternetConnection(
        getApplicationContext()); 
      if (!internet.HaveNetworkConnection()) { 
       showToast("No Internet Connection."); 
       return; 
      } else { 
     setUpdatedBarcodes(); 
      } 
      } 
      } 
      } 

     private boolean setUpdatedBarcodes(
      ArrayList<Model_BarcodeDetail> changedBarcodeList2) { 

     try { 
      int i = 0; 
      BarcodeDatabase barcodeDatabase = new 
      BarcodeDatabase(mActivity); 
      barcodeDatabase.open(); 
      for (Model_BarcodeDetail model : changedBarcodeList2) { 
       barcodeDatabase.updateEntry(model, userId); 
      } 

      barcodeDatabase.close(); 
      if (RefList1.equals(RefList)) { 

       if (dialog != null) { 
        dialog.dismiss(); // cancelling Async dialog here after 
              data is saved in DB 
       } 
       showToast("Barcodes updated successfully"); 
      } 
     } catch (Exception e) { 
      Log.i("Exception caught in: ", "setDownloadedBarcodes method"); 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 

    } 
+0

それは何かエラーを表示しますか?あなたはログ猫を共有できますか? – SaravInfern

+0

エラーは表示されません。 AlertDialogは進行を停止します。 –

+2

AsyncTaskを正しく利用していないということがあります。 setUpdatedbarCodes()をdoInBackgroundに移動する必要があります。 –

答えて

0

DB操作は、バックグラウンドスレッドで実行する必要があります。

は、ここに私のコードです。方法もdoInBackground()に入れてください。

0

データベースにデータを保存するときにメインスレッドで実行しないでください。バックグラウンドスレッドで実行してください。私はあなたのコードを変更

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     // do your work 
    } 
},0); 

または

new Thread(new Runnable() { 
    public void run() { 
     // do your work here 
    } 
}).start(); 
0

コードを試してみてください。それは助けるかもしれません..

class BackGroundTasks extends AsyncTask<String, String, Void> { 
@Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     if (dialog == null) { 
      dialog = ProgressDialog.show(mActivity, null, 
        "Please wait ...", true); 
     } 
    } 
    @Override 
    protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 

     CheckInternetConnection internet = new CheckInternetConnection(
       mActivity); 
     if (!internet.HaveNetworkConnection()) { 
      showToast("No Internet Connection."); 
     } else { 
      setUpdatedBarcodes(); 
     } 
     return null; 
    } 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     if (dialog != null) { 
      dialog.dismiss(); // cancelling Async dialog here 
     } 
    } 
} 

private boolean setUpdatedBarcodes(
    ArrayList<Model_BarcodeDetail> changedBarcodeList2) { 
     try { 
      int i = 0; 
      BarcodeDatabase barcodeDatabase = new 
      BarcodeDatabase(mActivity); 
      barcodeDatabase.open(); 
      for (Model_BarcodeDetail model : changedBarcodeList2) { 
       barcodeDatabase.updateEntry(model, userId); 
      } 

      barcodeDatabase.close(); 
      if (RefList1.equals(RefList)) { 
       showToast("Barcodes updated successfully"); 
      } 
     } catch (Exception e) { 
      Log.i("Exception caught in: ", "setDownloadedBarcodes method"); 
      e.printStackTrace(); 
      return false; 
     } 
     return true; 
    } 
関連する問題