2012-01-09 18 views
22

Al usar mi aplicación en ics, después de cambiar mi red wifi de red A a redB todas las solicitudes de imágenes comienzan a volver con una excepción .ErrnoException: isConnected failed: EHOSTUNREACH (No hay ruta al host) al cambiar la red wifi usando ICS

fallado con excepción

> org.apache.http.conn.HttpHostConnectException: Connection to 
> https://m1.testapp.com refused at 
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
> at 
> org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
> at 
> org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
> at 
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
> at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
> at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
> at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
> at 
> com.testApp.android.ws.PooledRequestProcessor$Runner.run(PooledRequestProcessor.java:298) 
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
> at java.lang.Thread.run(Thread.java:856) Caused by: 
> java.net.ConnectException: failed to connect to /109.233.153.38 (port 
> 443) after 20000ms: isConnected failed: EHOSTUNREACH (No route to 
> host)  at 
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:181) 
> ... 10 more Caused by: java.net.SocketException: failed to connect 
> to /109.233.153.38 (port 443) after 20000ms: isConnected failed: 
> EHOSTUNREACH (No route to host) at 
> libcore.io.IoBridge.isConnected(IoBridge.java:220) at 
> libcore.io.IoBridge.connectErrno(IoBridge.java:152) at 
> libcore.io.IoBridge.connect(IoBridge.java:112) at 
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) at 
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) at 
> java.net.Socket.connect(Socket.java:842)  at 
> org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
> at 
> org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
> ... 10 more Caused by: libcore.io.ErrnoException: isConnected 
> failed: EHOSTUNREACH (No route to host) at 
> libcore.io.IoBridge.isConnected(IoBridge.java:201) 

Lo más extraño es que incluso desinstalar la aplicación y volver a instalar no lo puedo solucionarlo, simplemente girando el teléfono apagado y encendido.

Vi un problema similar aquí http://groups.google.com/group/newsrob/browse_thread/thread/ea2f26d9d1753b79/5800e268eeab399c#5800e268eeab399c. El problema no está sucediendo en teléfonos con 4.0.3, solo en los que tienen 4.0.1, y la actualización todavía no parece estar disponible en Europa.

Respuesta

2

Tal vez le tome un tiempo para que el cambio tenga lugar por alguna razón? Usted puede comprobar para ver si hay una conexión de red activa antes de hacer la solicitud:

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo     = connectivityManager.getActiveNetworkInfo(); 

if (networkInfo != null && networkInfo.isConnected() && networkInfo.isAvailable()) 
{ 
    // DO WHAT YOU NEED TO DO ON THE NETWORK 
} 
else 
{ 
    // PROMPT USER THAT NETWORK IS DISCONNECTED 

     Toast.makeText(this, "There is no active network connection!", 5000).show(); 
} 
0

Mientras que la conmutación y establecer con el nuevo dispositivo de red puede llevar algún tiempo. El siguiente código puede ayudarte.

ConnectivityManager connMngr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
try { 
    return connMngr.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 
catch (NullPointerException npe) { 
    return false; 
} 
0

Parece que tiene un problema con el protocolo TCP. Es posible que en caso de una señal débil WiFi o 3G. Usa try/catch para eso.

0

fallidos: EHOSTUNREACH (No route to host)

Así que el enrutamiento no se ha establecido correctamente.

encontré que para algunos dispositivos tiene que establecer ipAssignment campo de la WifiConfiguration ‘s a WifiConfiguration.IpAssignment.DHCP manualmente para que una solicitud DHCP se lleva a cabo después de cambiar el wifi mediante programación. Esto solo se puede hacer a través de la reflexión, see this answer how to code it. Captura todas las excepciones, porque en otros dispositivos el campo ni siquiera existe.

Cuestiones relacionadas