2012-01-09 1 views
22

При использовании моего приложения в ics после изменения моей Wi-Fi сети из сети NetworkA в сеть B все запросы на образы начинают возвращаться с исключением ,ErrnoException: isConnected failed: EHOSTUNREACH (без маршрута к хосту) при изменении сети wifi с использованием ICS

не удалось, за исключением

> 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) 

Самое странное, что даже удалить приложение и переустановить его обыкновение исправить это, просто повернув телефон и дальше.

Я видел аналогичную проблему здесь http://groups.google.com/group/newsrob/browse_thread/thread/ea2f26d9d1753b79/5800e268eeab399c#5800e268eeab399c. Проблема не возникает на телефонах с 4.0.3, как раз на версии 4.0.1, и обновление пока не доступно в Европе.

ответ

2

Возможно, это займет какое-то время для перехода по какой-либо причине? Вы можете проверить, чтобы увидеть, если есть активное подключение к сети, прежде чем сделать запрос:

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

При переключении и создания новой сети устройство может занять некоторое время. Код ниже может помочь вам.

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

Похоже, у вас возникла проблема с протоколом TCP. Это может быть в случае слабых сигналов Wi-Fi или 3G. Используйте try/catch для этого.

0

не удалось: EHOSTUNREACH (Нет маршрута к хосту)

Так маршрутизация не была установлена ​​правильно.

Я обнаружил, что для некоторых устройств вы должны установить WifiConfiguration «s ipAssignment поля для WifiConfiguration.IpAssignment.DHCP вручную, что запрос DHCP выполняется после изменения WiFi программно. Это можно сделать только через отражение, see this answer how to code it. Поймать все исключения, потому что на других устройствах поле даже не существует.

Смежные вопросы