如何在AsyncTask中处理异常

时间:2012-07-18 05:04:28

标签: android android-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。问题是如果服务器正在运行,那么一切都很好。但是如果服务器没有运行并且我调用了Web服务,那么我会得到强制关闭应用程序的例外情况。为什么?我正在处理 SocketTimeoutException 如果发生异常,那么我说我的Activity上显示toast但是为什么它强制关闭应用程序。我怎么处理它?感谢

2 个答案:

答案 0 :(得分: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();
        }

答案 1 :(得分:2)

您不应在Toast

中使用doInBackground
 catch (SocketTimeoutException e) {                              

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