私はWebサービスに接続するアプリケーションを持っています。私は、アプリケーションのライフサイクル中に私の接続タイプに忠実なままであれば、WIFIや3Gを使用して何の問題もなく何度でもWebサービスに接続できます。つまり、私がWIFIから3Gに切り替わらない場合です。私がWIFIから3Gに切り替えると、私はもはや応答を得ることができません。私の接続は、応答を待っているだけです。WiFi接続から3gに切り替えると接続がハングアップしますか?
以下の4つのシナリオを試しました。私は第3のシナリオにのみ問題があります。何が問題なの?
第一のシナリオ:接続は、(OK)WIFIの上に常にある
- アプリケーションはWIFIを使用してWebサービスに接続します。
- 応答が正常に受信されました。
- アプリケーションは、WIFIを使用してWebサービスに再度接続します。
- 応答が正常に受信されました。
第二のシナリオ:接続は3Gに常にある(OK)
- アプリケーションはWIFIを使用してWebサービスに接続します。
- 応答が正常に受信されました。
- アプリケーションは、WIFIを使用してWebサービスに再度接続します。
- 応答が正常に受信されました。
3シナリオ:WIFIから3Gへの接続スイッチ(無応答)
- アプリケーションは、WiFiを使用してWebサービスに接続します。
- 応答が正常に受信されました。
- 接続が3Gに切り替えられました。 WIFIは無効になっています。 3Gが有効になります。
- アプリケーションは、3Gを使用してWebサービスに再度接続します。
- 応答またはエラーが受信されませんでした。アプリケーションは応答を待っています。最後のログは、
getResponseCode
が呼び出される前に表示されました。
4シナリオ:3Gから無線LANへの接続スイッチ(OK)
- アプリケーションは、3Gを使用してWebサービスに接続します。
- 応答が正常に受信されました。
- 接続がWIFIに切り替えられました。 3Gは無効です。 WIFIが有効になっています。
- アプリケーションは、WIFIを使用してWebサービスに再度接続します。
- 応答が正常に受信されました。
私の推測は、デフォルトでは、HttpURLConnection
は3Gと比較して優れた接続タイプと考えています。したがって、接続がWIFIから3Gに切り替わると、HttpURLConnection
は3Gを認識せずにWIFIを使用して接続しようとします。一方、HttpURLConnection
では、WIFIがより良い接続タイプであるため、3Gから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)
{
}
ありがとう、Naresh!私の接続は自動的にWiFiから3Gに切り替わらないことに注意してください。 3Gを有効にする前に手動でWiFiを無効にしています。私が知る限り、私は以前の接続を再利用していません。私は常にhttpsURLConnection =(HttpURLConnection)((新しいURL(url))を呼び出しています。openConnection()); Webサービスに接続する前にしたがって、私の接続は常にWebサービスに接続しようとする前に更新されます。また、3GからWiFiに切り替えると、Webサービスに接続できます。私がWiFiから3Gに切り替えると、それは機能しません。 – Arci
もう1つ注意してください(HttpURLConnection)((新しいURL(url))。openConnection())は新しい接続を再確立していますか?それとも、それはまだ私の古い接続を別のURLだけで使用していますか? – Arci
はい..itは新しい接続を確立します。また、私はあなたがHttpUrlCOnnectionよりも便利で設定可能な、アンドロイドでHttpClientに切り替えることをお勧めします – Naresh