利用可能な接続がない場合、BlackBerry HTTPリクエストはすぐにエラーになりますか?

StackOverflow https://stackoverflow.com/questions/825289

  •  05-07-2019
  •  | 
  •  

質問

HTTP接続があり、次の方法で開いています

HttpConnection c = (HttpConnection)Connector.open(url);

url は次のいずれかです

  • http://foo.bar; deviceside = false
  • http://foo.bar; deviceside = false; ConnectionType = mds-public
  • http://foo.bar; deviceside = true; ConnectionUID = xxxxxxx
  • http://foo.bar; deviceside = true; interface = wifi

デバイスがネットワークに接続されていないために接続を確立できない場合、すぐにリクエストをエラーアウトする方法はありますか?現状では、多くの場合、タイムアウトまでに約1分かかります(具体的には、ネットワークから情報を取得するための最初の呼び出し: c.getResponseCode()

編集:エラーを意味します。ある場合、具体的には、Wifiは、タイムアウトする前にWi-Fiがオンになっていない場合は数分間待機し、すぐに停止するようにします。

役に立ちましたか?

解決

RadioInfoを使用しますクラスを使用して、接続があるかどうか、および接続を試みる前に無線がオンになっているかどうかを確認します。次に、接続を試みる前にユーザーにメッセージを表示するか、ラジオをオンにすると(オフになっている場合)、ユーザーエクスペリエンスが大幅に向上します。

使用してみてください:

if (RadioInfo.getState() == RadioInfo.STATE_OFF)
OR
if (RadioInfo.getSignalLevel() == RadioInfo.LEVEL_NO_COVERAGE)

接続する前に接続状態を確認するには

他のヒント

投稿をスレッドに入れて、タイムアウトを高速化します。 " PostThread"を確認してください。すべての例外をキャッチ(および保存)します。

public byte[] post(String url, byte[] requestString){
    PostThread thread=new PostThread(url, requestString);

    synchronized(thread){
        try{
            thread.start();
            thread.wait(TIMEOUT);
        }catch(Throwable e){

        }//method
    }//synch

    if (thread.isAlive()){
        try{
            thread.interrupt();
        }catch(Throwable e){

        }//method
        D.error("Timeout");
    }//endif

    if (thread.error!=null) D.error(thread.error);
    if (thread.output!=null) return thread.output;
    throw D.error("No output");
}//method

ConnectionTimeout パラメーターもありますが、テストしていません。たとえば、 socket:// server:80 / mywebservice; ConnectionTimeout = 2000

プログラムで指定できる方法ではありません。イライラすることもありますが、モバイルデバイス(特にBlackBerry)からの接続は、一般的に宛先サーバーに到達する前にいくつかの異なるネットワークとゲートウェイを通過します:ワイヤレス->キャリアAPN->インターネット-> BES > foo.barサーバー。これらのポイントでの潜在的な遅延を考慮して、大きなタイムアウトが組み込まれています。

デフォルトのデバイス接続タイムアウトは、BES / MDSサーバー(またはJDEのMDS \ config \ rimpublic.propertyファイル)から制御できますが、おそらく役に立ちません。

別のスレッドからタイムアウトチェックを行うことをお勧めします。これは、接続が確立されている場合でも発生するため、ネットワークの待ち時間が非常に長いと言うため、ユーザーをそれほど長く待たせないでくださいもの。

そのため、その場合、別のスレッドからのチェックがあり、現在の時間から接続を開始するために入力した時間を引いた時間が設定時間よりも大きいかどうか、connection.close()を使用して接続を閉じます!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top