Имам приложение, което се свързва с уеб услуга. Мога да се свързвам с уеб услугата произволен брой пъти без проблем с помощта на WIFI или 3G, при условие че оставам верен на моя тип връзка по време на жизнения цикъл на моето приложение. Това е, ако не превключа от WIFI към 3G. Ако превключа от WIFI към 3G, вече не мога да получа отговор. Връзката ми просто продължава да чака отговор.
Опитах 4 сценария по-долу. Имам проблем само с третия сценарий. Какъв може да е проблема?
Първи сценарий: Връзката винаги е на WIFI (ОК)
- Приложението се свързва с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
- Приложението се свързва отново с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
2-ри сценарий: Връзката винаги е в 3G (Добре)
- Приложението се свързва с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
- Приложението се свързва отново с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
3-ти сценарий: Връзката превключва от WIFI към 3G (без отговор)
- Приложението се свързва с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
- Връзката беше превключена на 3G. WIFI е деактивиран. 3G е активиран.
- Приложението се свързва отново с уеб услуга чрез 3G.
- Няма отговор или е получена грешка. Приложението продължава да чака отговор. Последният регистрационен файл беше показан преди извикването на
getResponseCode
.
4-ти сценарий: Връзката превключва от 3G към WIFI (Добре)
- Приложението се свързва с уеб услуга чрез 3G.
- Отговорът беше получен успешно.
- Връзката беше превключена към WIFI. 3G е деактивиран. WIFI е активиран.
- Приложението се свързва отново с уеб услуга чрез WIFI.
- Отговорът беше получен успешно.
Предполагам, че по подразбиране HttpURLConnection
смята WIFI за по-добър тип връзка в сравнение с 3G. Така че, когато връзката е превключена от WIFI към 3G, HttpURLConnection
отказва да потвърди 3G и все още се опитва да се свърже с помощта на WIFI. От друга страна, HttpURLConnection
позволява превключване от 3G към WIFI, тъй като WIFI е по-добър тип връзка. Прав ли съм с това? Ако е така, как да разреша превключване от WIFI към 3G?
По-долу е даден фрагмент от моя код: (Извиквам го всеки път, когато се свързвам с уеб услуга.)
//open new connection
httpsURLConnection = (HttpURLConnection) ((new URL(url)).openConnection());
httpsURLConnection.setDoInput(isDoInput);
httpsURLConnection.setDoOutput(isDoOutput);
try
{
//supply parameters
OutputStreamWriter wr = new OutputStreamWriter(httpsURLConnection.getOutputStream());
wr.write(data);
wr.flush();
if(httpURLConnection != null)
{
if (httpsURLConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) //connection hangs here
{
//some code
}
else
{
//some code
}
}
}catch(Exception e)
{
}