У меня есть приложение, которое подключается к веб-службе. Я могу подключаться к веб-сервису любое количество раз без каких-либо проблем, используя WIFI или 3G, при условии, что я остаюсь верным своему типу подключения в течение жизненного цикла моего приложения. Это если я не переключаюсь с WIFI на 3G. Если я переключаюсь с WIFI на 3G, я больше не могу получить ответ. Мое соединение просто продолжает ждать ответа.
Я попробовал 4 сценария ниже. У меня проблема только с 3-м сценарием. В чем может быть проблема?
1-й сценарий: подключение всегда по WIFI (в порядке)
- Приложение подключается к веб-службе с помощью WIFI.
- Ответ успешно получен.
- Приложение снова подключается к веб-службе с помощью WIFI.
- Ответ успешно получен.
2-й сценарий: соединение всегда на 3G (в порядке)
- Приложение подключается к веб-службе с помощью WIFI.
- Ответ успешно получен.
- Приложение снова подключается к веб-службе с помощью WIFI.
- Ответ успешно получен.
3-й сценарий: соединение переключается с WIFI на 3G (нет ответа)
- Приложение подключается к веб-службе с помощью WIFI.
- Ответ успешно получен.
- Связь переключилась на 3G. Wi-Fi отключен. 3G включен.
- Приложение снова подключается к веб-службе, используя 3G.
- Нет ответа или получена ошибка. Приложение продолжает ждать ответа. Последний журнал отображался до вызова
getResponseCode
.
4-й сценарий: подключение переключается с 3G на WIFI (в порядке)
- Приложение подключается к веб-службе с помощью 3G.
- Ответ успешно получен.
- Связь переключилась на WIFI. 3G отключен. Wi-Fi включен.
- Приложение снова подключается к веб-службе с помощью 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)
{
}