基本的に、電話のインターネット/データ接続は完全に正常であるのに、アプリがサーバー/サーバーに到達できない場合にユーザーに通知しようとしています。だから私はここのこの投稿に従ってタイムアウトを設定しました:JavaでAndroidのHttpResponseタイムアウトを設定する方法
例外が正しくキャッチされた場合を除いて、Toastメッセージを表示してアプリ画面に戻る代わりに、アプリがクラッシュすることを除いて、これはうまく機能します。「Log.e( "CONNTIMEOUT"、e.toString());」に注意してください。logcatに次のように正しくログインしました:"CONN TIMEOUT org.apache.http.conn.ConnectTimeoutException:Connect to /192.168.11.60:80 timed out"
要求に応じて、完全なlogcat:http: //pastebin.com/rpe8iKRi
// Making HTTP request
try {
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
int timeoutConnection = 3000;
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 5000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ConnectTimeoutException e) {
Toast.makeText(getApplicationContext(), "Server timeout", Toast.LENGTH_LONG).show();
Log.e("CONN TIMEOUT", e.toString());
} catch (SocketTimeoutException e) {
Toast.makeText(getApplicationContext(), "Server timeout", Toast.LENGTH_LONG).show();
Log.e("SOCK TIMEOUT", e.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
Log.e("OTHER EXCEPTIONS", e.toString());
}