2

私はこのように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 サービスを呼び出すと、Force Application closeという例外が発生します。なんで?私はSocketTimeoutException IF 例外を処理しています。その後、アクティビティでトーストを表示すると言っていますが、なぜアプリケーションを強制的に閉じるのでしょうか。どうすればそれを処理できますか?ありがとう

4

2 に答える 2

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();
        }
于 2012-07-18T05:11:39.227 に答える