Android - 在doinbackground期间显示警报对话框,同时捕获异常

时间:2013-10-12 07:05:57

标签: android exception android-asynctask try-catch android-alertdialog

我有这个代码,它会在它到达Source.httpConn时立即捕获,并且它会在下面发送异常来捕获。

         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++)
    .
    .
    .
     }

在catch部分中有一个我的警告对话框方法。它通常工作得很好但我怀疑我有问题因为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();
}

2 个答案:

答案 0 :(得分:3)

您无法从doInbackground更新ui。在backgroudn线程上调用doInbackground。 Ui应该在ui线程上更新。将结果返回到doInbackground并在onPostExecute

中更新ui

有关详细信息,请查看文档

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

您还可以使用runOnUithread这是一种活动类

的方法
runOnUiThread(new Runnable(){
        public void run() {
           // dispaly dialog here
           // no network related operation here
        }
     });

答案 1 :(得分:1)

runOnUiThead中显示您的对话框,这是一种活动类的方法。

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

                  //write your alert dialog code here

        }
     });