2012-07-18 40 views
3

我使用的AsyncTask這樣如何處理例外的AsyncTask

public class AccountReportActivity extends Activity { 

private OrgaLevelTask orgaLevelTask; 

    public void onCreate(Bundle savedInstanceState) {    
     ...... 
     orgaLevelTask = new OrgaLevelTask(AccountReportActivity.this, spinner_orgaLevel, spinner_branch, txt_extra, txt_extra1);    
     orgaLevelTask.execute(); 

    } //end of onCreate 

} //end of class AccountReportActivity 

任務:

public class OrgaLevelTask extends AsyncTask<Void, Void, ArrayList<OrgaLevel>> { 

    //Constrcutor 
    public OrgaLevelTask(AccountReportActivity accountReportActivity, Spinner spinner_orgaLevel, Spinner spinner_branch, TextView txt_extra, TextView txt_extra1) { 

     this.accountReportActivity = accountReportActivity; 
     this.spinner_orgaLevel = spinner_orgaLevel; 
     ....     
    } //end of constructor 

    @Override 
    protected ArrayList<OrgaLevel> doInBackground(Void... arg0) {  
     return callWebService();   
    } //end of doInBackground() 

    private ArrayList<OrgaLevel> callWebService() { 

     try { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      ...... 
     } catch (SocketTimeoutException e) {     
      Toast.makeText(accountReportActivity, "Service is not connected, Please make sure your server is running", Toast.LENGTH_LONG).show(); 
      return null;         
     } catch(Exception e) {    
      e.printStackTrace(); 
      System.out.println();        
     } 
    } //end of callWebService() 

} //end of class OrgaLevelTask 

我這個任務調用其他的AsyncTask具有相同的代碼。問題是如果服務器正在運行,那麼一切都很好。但是,如果服務器沒有運行,我打電話給網絡服務,然後我得到的異常,強制應用程序關閉。爲什麼?我正在處理SocketTimeoutException如果發生異常,那麼我說的是在我的Activity上顯示敬酒,但爲什麼它強制關閉應用程序。我該如何處理它?由於

+0

你不應該使用使用Toast你確定你是擊中正確的異常,在你的情況下SocketTimeoutException?也許嘗試添加頂級類Exception並打印堆棧跟蹤來查找究竟發生了什麼異常。 – 2012-07-18 05:11:24

+1

完整的logcat輸出始終需要在Stackoverflow上提出問題。 – 2012-07-18 05:14:45

回答

2

您可以檢查互聯網連接這樣第一

public static boolean checkConnection(Context context) { 

    final ConnectivityManager mConnectivityManager = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    final NetworkInfo netInfo = mConnectivityManager.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } else 
     return false; 
} 

在這種方法中

 // Checking the internet connection 
     if (!InternetConnectionCheck.checkConnection(this)) { 
      Utilities.alertDialogBox(this, R.string.Title_String, 
        R.string.No_Internet_connection_String); 
     } else { 
      orgaLevelTask = new OrgaLevelTask(AccountReportActivity.this, spinner_orgaLevel, spinner_branch, txt_extra, txt_extra1);    
      orgaLevelTask.execute(); 
     } 
+0

問題在於特定主機不可用(即服務器不可用),而不是互聯網。 – 2012-07-18 05:15:10

+0

我在'最終NetworkInfo netInfo = mConnectivityManager.getActiveNetworkInfo();'...'AndroidRuntime(389):未捕獲的處理程序:由於未捕獲的異常'退出的線程主錯誤。爲什麼我得到這個? – Basit 2012-07-25 09:26:44

2

doInBackground

catch (SocketTimeoutException e) {        

    Toast.makeText(accountReportActivity, "Service is not connected, Please make sure your server is running", Toast.LENGTH_LONG).show(); //<----------------------