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