0

ConnectTimeoutException の処理方法を知っている人はいますか? AsyncTask を使用して変数を URL に投稿していますが、インターネット接続が不安定なため、ConnectTimeoutException が原因で null データが返されます。たとえば、タイムアウトが発生した場合、もう一度実行してみるなど、これを処理する最善の方法は何ですか?以前にこの問題が発生したことがないため、処理方法がわかりませんが、ユーザーエクスペリエンスを向上させるために処理が必要だと感じています. アイデアはありますか?

4

3 に答える 3

0

ハンドラーを使用してActivityConnectTimeoutException

AsyncTaskでこの例外をキャッチし、メッセージを送信しますHandler(その後、必要な処理を行います)

参考までに、AsyncTaskは長時間の操作用に設計されていないため、スレッドを使用する必要があります

于 2013-03-01T14:46:36.990 に答える
0

アクティビティ ヘルパーと呼ばれる別のクラスを作成し、Web サービス呼び出しを必要とする任意のクラスの非同期タスクに実装します。

public class ActivityHelper {
    public static final String NETWORK_CONNECTION_MESSAGE = "No Network Connection. Please make sure you have a Network Connection.";


public static boolean isNetworkPresent(Context applicationContext){
    boolean hasService = false;
    NetworkInfo info=(NetworkInfo)( (ConnectivityManager)applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
    hasService = (info==null || !info.isConnected())?false:true;
    return hasService;

}
}

「doInBackground」メソッドでActivity Helperを呼び出します。このような..

private class YourAsyncTask extends AsyncTask<String, Void, String> {
        Message message = new Message();
    String type = "";
    protected void onPreExecute() {
         ActivityHelper.onUserInteraction(getApplicationContext());
        dialog = ProgressDialog.show(LocationType.this,
                "Connecting to server", "Please wait...", true, true);
        dialog.setCancelable(false);
    }
protected String doInBackground(final String... args) {
        try {

            if(!ActivityHelper.isNetworkPresent(getApplicationContext())){
                message.what = ActivityHelper.NONETWORKCONNECTION;
                return null;
            }
} catch (Exception e) {
            Log.e(this.getClass().getName(),
                    "Exception Message");
        }
        return null;
    }
于 2013-03-01T15:35:54.583 に答える
0

これは、ネットワークの状態を確認する方法です

 ConnectivityManager connMgr = (ConnectivityManager) 
                getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                //execute your AsyncTask method
            } else {

               //maketoast..."No network connection available"
            }
于 2013-03-01T14:49:37.130 に答える