2013-04-14 42 views
0

我在我的android應用程序中有一個功能齊全的asynctask,但是當我沒有連接它會導致我的應用程序崩潰在我的活動(AlertDialog.Builder)不連接。我將Context傳遞給我的異步,所以這可能與它有關,但不確定。Android AlertDialog活動和異步錯誤

以下是來自Async類和Activity的代碼。 LogCat告訴我AlertDialog警報builder.create()中發生錯誤。我該如何解決?

從異步類:

InputsRecapUploadTask extends AsyncTask<String, Void, Integer> { 

public InputsRecapUploadTask(InputsRecap activity, 
     ProgressDialog progressDialog, Context ctx) { 
    this.activity = activity; 
    this.myCtx = ctx; 
    this.progressDialog = progressDialog; 
} 

@Override 
protected void onPreExecute() { 
    progressDialog.show(); 
} 

}  
@Override 
protected Integer doInBackground(String... arg0) { 
    //// http code 
       responseCode = 1; 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     progressDialog.dismiss(); 
     activity.showLoginError(""); 
    } 

    return responseCode; 

} 

@Override 
protected void onPostExecute(Integer headerCode) { 
    progressDialog.dismiss(); 
    if (headerCode == 1) 
     activity.login(id); 
    else 
     activity.showLoginError(""); 
} 
Activity Class: 
    public void showLoginError(String result) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(InputsRecap.this); 
    builder.setPositiveButton("okay", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
    builder.setMessage("unable to upload database"); 
    AlertDialog alert = builder.create(); 
    alert.setCancelable(true); 
    alert.show(); 

} 

回答

1

如果異常在doInBackground方法拋出這兩行:

progressDialog.dismiss(); 
activity.showLoginError(""); 

會造成異常 - 你不能從doInBackground方法中修改UI 。而是設置一個標誌,並在主線程中執行的onPostExecute中顯示錯誤對話框。

檢查下面的鏈接,特別是標題下的主題4個步驟

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

+0

謝謝鮑里斯和拉古南丹。修復工作! – Bachzen