1

によって開かれた 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 がオンになっていない場合、数分間待機し、すぐに停止したいと考えています。

4

4 に答える 4

6

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

使用してみてください:

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

接続する前に接続状態を確認します。

于 2009-05-05T15:40:48.570 に答える
1

タイムアウトを速くするために、投稿をスレッドに入れます。「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

于 2009-11-19T09:56:50.853 に答える
0

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

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

于 2009-06-23T17:33:52.100 に答える