我有一个连接到 Web 服务的应用程序。只要我在应用程序的生命周期内始终忠实于我的连接类型,我就可以使用 WIFI 或 3G 连接到 Web 服务任意次数而不会出现任何问题。那就是如果我不从WIFI切换到3G。如果我从 WIFI 切换到 3G,我将无法再得到响应。我的连接一直在等待响应。
我尝试了以下 4 个场景。我只对第三种情况有问题。可能是什么问题呢?
第一种情况:连接始终在 WIFI 上(好的)
- 应用程序使用 WIFI 连接到 Web 服务。
- 已成功收到响应。
- 应用程序使用 WIFI 再次连接到 Web 服务。
- 响应已成功接收。
第二种情况:连接始终在 3G 上(好的)
- 应用程序使用 WIFI 连接到 Web 服务。
- 已成功收到响应。
- 应用程序使用 WIFI 再次连接到 Web 服务。
- 响应已成功接收。
第三种情况:连接从WIFI切换到3G(无响应)
- 应用程序使用 WIFI 连接到 Web 服务。
- 已成功收到响应。
- 连接已切换到 3G。WIFI被禁用。3G 已启用。
- 应用程序再次使用 3G 连接到 Web 服务。
- 没有响应或收到错误。应用程序继续等待响应。调用之前显示的最后一个日志
getResponseCode
。
第四种情况:连接从 3G 切换到 WIFI(Ok)
- 应用程序使用 3G 连接到 Web 服务。
- 已成功收到响应。
- 连接已切换到 WIFI。3G 被禁用。WIFI已启用。
- 应用程序使用 WIFI 再次连接到 Web 服务。
- 响应已成功接收。
我的猜测是默认情况下,HttpURLConnection
认为 WIFI 是比 3G 更好的连接类型。所以当连接从WIFI切换到3G时,HttpURLConnection
拒绝承认3G,仍然尝试使用WIFI连接。另一方面,HttpURLConnection
允许从 3G 切换到 WIFI,因为 WIFI 是更好的连接类型。我对此是否正确?如果是这样,我如何允许从 WIFI 切换到 3G?
下面是我的代码片段:(我每次连接到 Web 服务时都会调用它。)
//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)
{
}