studio por getinputstream enviar data java android httpurlconnection java-io

por - Obteniendo java.net.SocketTimeoutException: se agotó el tiempo de espera de la conexión en android



httpurlconnection post android (4)

He buscado en toda la web y después de leer muchos documentos relacionados con la excepción de tiempo de espera de conexión, lo que entendí es que prevenir SocketTimeoutException está más allá de nuestro límite ... Una manera de manejarlo de manera efectiva es definir un tiempo de espera de conexión y manejarlo posteriormente utilizando un bloque try catch ... espero que esto ayude a cualquier persona en el futuro que tenga el mismo problema.

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

Soy relativamente nuevo en el desarrollo de Android. Estoy desarrollando una aplicación para Android en la que estoy enviando solicitudes al servidor web y analizando objetos json. Frecuentemente recibo java.net.SocketTimeoutException: Connection timed out Excepción de java.net.SocketTimeoutException: Connection timed out mientras se comunicaba con el servidor. Algunas veces funcionará perfectamente sin ningún problema. Sé que esta misma pregunta se ha hecho en TANTO ocasiones. Pero aun así no obtuve ninguna solución satisfactoria a este problema. Estoy publicando mi código de comunicación logcat y servidor de aplicaciones 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

¿Alguien puede ayudarme a encontrar una solución para esto? Gracias por adelantado....


Si está probando el servidor en localhost, su dispositivo Android debe estar conectado a la misma red local. Luego, la URL del servidor utilizada por su APLICACIÓN debe incluir la dirección IP de su computadora y no la máscara "localhost".


Soy consciente de que esta pregunta es un poco vieja. Pero dado que me tropecé con esto mientras investigaba, 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 se trata de un problema relacionado con la red. Sin embargo, lo que puede hacer es intentar nuevamente conectarse unas pocas veces. Esto puede funcionar como una solución alternativa 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 ayude a alguien.


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(); } } }