0

我有這個代碼,只要它碰到Source.httpConn就會捕獲它,它發送下面的異常來捕獲。Android - 在捕獲異常時在doinbackground期間顯示警報對話框

  try 
      { 
      JSONTokener sbTokener = new JSONTokener(Source.httpConn(infoUrlStr, Main.this).toString()); 
      //array için hazırlandı 

      JSONArray jArray=new JSONArray(sbTokener); 
      //arraye eklendi 
      for(int i=0; i<(jArray.length()); i++) 
    . 
    . 
    . 
    } 

在捕捉部分有我的警報對話方法。它通常工作得很好,但我懷疑我有這個問題,因爲doInBackground。在顯示下面的警報對話框之前,應用程序崩潰。所有的try-catch都在我的doInBackground方法中ASyncTask

    catch (Exception e) { 
         AlertDialogDisp(Main.this, noServ, noServLog); 
        } 

我怎樣才能讓我的應用程序不會崩潰,只是顯示此警告對話框,然後回到我的主要活動,因爲它是。以下是我的提醒對話方法:

 protected void AlertDialogDisp(Context dialogContext, String head, String log) { 


    new AlertDialog.Builder(dialogContext) 
    .setTitle(head) 
    .setMessage(log) 
    .setPositiveButton("okay", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      // On Alert Dialog Button 
      dialog.dismiss(); 
     } 
    }) 

    .show(); 
} 
+0

是你的aynsctask活動班的內部類嗎? – Raghunandan

+0

@拉康丹丹是的。 –

回答

3

您不能從doInbackground更新ui。在backgroudn線程上調用doInbackground。 Ui應該在ui線程上更新。返回結果doInbackground和更新UI在onPostExecute

欲瞭解更多信息檢查文檔

http://developer.android.com/reference/android/os/AsyncTask.html

您還可以使用runOnUithread是活動類的方法

runOnUiThread(new Runnable(){ 
     public void run() { 
      // dispaly dialog here 
      // no network related operation here 
     } 
    }); 
+0

這就是問題所在,我該怎麼做?我可以返回結果,但如果doinbackground失敗,我需要顯示alertdialog –

+1

+1完美... !!! –

+0

@SuhrahjRothgar返回一個結果,如0 0r 1或boolean,並在'onPostExecute'中顯示一個對話框。我沒有看到這個問題 – Raghunandan

1

顯示你的對話在runOnUiThead這是一種活動類的方法。

runOnUiThread(new Runnable(){ 
     public void run() { 

        //write your alert dialog code here 

     } 
    }); 
+0

如果你在ui線程上運行n/w相關的操作,你會得到一個異常。我不認爲你需要嘗試抓住這裏。只有在捕捉操作顯示對話框,因此對話框代碼應該在運行方法 – Raghunandan

+0

你是對的,但使用try catch是我的慣例。 :) –

+0

但爲什麼你需要嘗試捕獲顯示警報對話框? – Raghunandan