Obtener java.net.SocketTimeoutException: La conexión se agotó en android

Soy relativamente nuevo en el desarrollo de Android. Estoy desarrollando una aplicación de Android donde estoy enviando solicitud al servidor web y analizar objetos json. Frecuentemente estoy recibiendo java.net.SocketTimeoutException: Connection timed out excepción al comunicarse con el servidor. Algunas veces funcionará perfectamente sin ningún problema. Sé que esta misma pregunta se ha hecho en tantas ocasiones. Pero todavía no conseguí ninguna solución satisfactoria a este problema. Estoy publicando mi código de comunicación logcat y app-server a continuación.

 public JSONObject RequestWithHttpUrlConn(String _url, String param){ HttpURLConnection con = null; URL url; String response = ""; Scanner inStream = null; PrintWriter out = null; try { url = new URL(_url); con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); con.setRequestMethod("POST"); if(param != null){ con.setFixedLengthStreamingMode(param.getBytes().length); } con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); out = new PrintWriter(con.getOutputStream()); if(param != null){ out.print(param); } out.flush(); out.close(); inStream = new Scanner(con.getInputStream()); while(inStream.hasNextLine()){ response+=(inStream.nextLine()); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(con != null){ con.disconnect(); }if(inStream != null){ inStream.close(); }if(out != null){ out.flush(); out.close(); } } } 

Logcat:

 03-25 10:55:32.613: W/System.err(18868): java.net.SocketTimeoutException: Connection timed out 03-25 10:55:32.617: W/System.err(18868):at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method) 03-25 10:55:32.617: W/System.err(18868):at dalvik.system.BlockGuard $WrappedNetworkSystem.connect(BlockGuard.java:357) 03-25 10:55:32.617: W/System.err(18868):at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204) 03-25 10:55:32.617: W/System.err(18868):at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437) 03-25 10:55:32.617: W/System.err(18868):at java.net.Socket.connect(Socket.java:1002) 03-25 10:55:32.621: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init> (HttpConnection.java:75) 03-25 10:55:32.621: W/System.err(18868): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init> (HttpConnection.java:48)03-25 10:55:32.624: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect (HttpConnection.java:322)03-25 10:55:32.624: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get (HttpConnectionPool.java:89)03-25 10:55:32.628: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpCon nection(HttpURLConnectionImpl.java:285) 03-25 10:55:32.628: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConn ection(HttpURLConnectionImpl.java:267) 03-25 10:55:32.636: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:205) 03-25 10:55:32.636: W/System.err(18868):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputS tream(HttpURLConnectionImpl.java:614) 03-25 10:55:32.636: W/System.err(18868):at com.myapp.core.JSONRequest.RequestWithHttpUrlConn(JSONRequest.java:63) 03-25 10:55:32.636: W/System.err(18868): at com.myapp.core.DetailPage $AsyncRecBooks.doInBackground(AKBookDetailView.java:265) 03-25 10:55:32.640: W/System.err(18868): at com.myapp.core.DetailPage $AsyncRecBooks.doInBackground(AKBookDetailView.java:1) 03-25 10:55:32.640: W/System.err(18868): at android.os.AsyncTask$2.call (AsyncTask.java:185) 03-25 10:55:32.640: W/System.err(18868): at java.util.concurrent.FutureTask $Sync.innerRun(FutureTask.java:306) 03-25 10:55:32.640: W/System.err(18868): at java.util.concurrent.FutureTask.run (FutureTask.java:138) 03-25 10:55:32.640: W/System.err(18868): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 03-25 10:55:32.648: W/System.err(18868): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 03-25 10:55:32.648: W/System.err(18868): at java.lang.Thread.run(Thread.java:1019) 03-25 10:55:32.652: E/JSON Parser(18868): Error parsing data org.json.JSONException: End of input at character 0 of 

¿Puede alguien ayudarme a encontrar una solución para esto? Gracias por adelantado….

4 Solutions collect form web for “Obtener java.net.SocketTimeoutException: La conexión se agotó en android”

He buscado en toda la web y después de leer un montón de documentos con respecto a la excepción de tiempo de espera de conexión, lo que entendí es que, la prevención de SocketTimeoutException está más allá de nuestro límite … Una forma de manejar eficazmente es definir un tiempo de espera de conexión y más tarde manejar Lo mediante un try catch bloque …. Espero que esto ayudará a nadie en el futuro que se enfrentan a la misma cuestión.

 HttpUrlConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(7000); //set the timeout in milliseconds 

Soy consciente de que esta pregunta es un poco antigua. Pero ya que me tropecé en esto al hacer la investigación, pensé que una pequeña adición podría ser útil.

Como se indicó el error no puede ser resuelto por el cliente, ya que es un problema relacionado con la red. Sin embargo, lo que puede hacer es volver a intentar conectarse unas cuantas veces. Esto puede funcionar como una solución hasta que se resuelva el problema real.

 for (int retries = 0; retries < 3; retries++) { try { final HttpClient client = createHttpClientWithDefaultSocketFactory(null, null); final HttpResponse response = client.execute(get); final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { throw new IllegalStateException("GET Request on '" + get.getURI().toString() + "' resulted in " + statusCode); } else { return response.getEntity(); } } catch (final java.net.SocketTimeoutException e) { // connection timed out...let's try again } } 

Tal vez esto ayuda a alguien.

Si está probando el servidor en localhost su dispositivo Android debe estar conectado a la misma red local. A continuación, la URL del servidor utilizada por su APP debe incluir la dirección IP del equipo y no la máscara "localhost".

 public JSONObject RequestWithHttpUrlConn(String _url, String param){ HttpURLConnection con = null; URL url; String response = ""; Scanner inStream = null; PrintWriter out = null; try { url = new URL(_url); con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); con.setRequestMethod("POST"); if(param != null){ con.setFixedLengthStreamingMode(param.getBytes().length); } con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); out = new PrintWriter(con.getOutputStream()); if(param != null){ out.print(param); } out.flush(); out.close(); inStream = new Scanner(con.getInputStream()); while(inStream.hasNextLine()){ response+=(inStream.nextLine()); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(con != null){ con.disconnect(); }if(inStream != null){ inStream.close(); }if(out != null){ out.flush(); out.close(); } } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.