2011-08-05 3 views
1

を:ブラックベリーのHttpConnectionのタイミングアウト、私は次のように解析するためのXMLファイルをつかむしようとしています

private void getAndParseXML(String _xmlurl) { 
     HttpConnection xmlcon = null; 
     InputStream input  = null; 
     SAXParserFactory spf = null; 

     try { 
      xmlcon = (HttpConnection)Connector.open(_xmlurl, Connector.READ); // open connection to XML source 
      spf = SAXParserFactory.newInstance();        // set up xml parsers 
      input = xmlcon.openInputStream();         // set up input stream 

      SAXParser saxparser = spf.newSAXParser(); // create a new parser object 
      saxparser.parse(input, this);    // parse operations start here 
     } 
     catch(IOException ex) { 
      System.out.println("IOException Caught:\t" + ex.getMessage()); // set a default item if any exception occurs with retreiving or parsing XML file 
     } 
     catch (SAXException ex) { 
      System.out.println("SAXException Caught:\t" + ex.getMessage()); 
      ex.printStackTrace(); 
     } 
     catch (IllegalArgumentException ex) { 
      System.out.println("IllegalArgumentException Caught:\t" + ex.getMessage()); 
      ex.printStackTrace(); 
     } 
     catch (ParserConfigurationException ex) { 
      System.out.println("ParserConfigurationException Caught:\t" + ex.getMessage()); 
      ex.printStackTrace(); 
     } 
     finally { 

      if (input != null) { 
       try { 
        input.close(); // attempt to close all connections 

       } 
       catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      if (xmlcon != null) { 
       try { 
        xmlcon.close(); 
       } 
       catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } 
    } // END ---------------------------------------------------------------------------- 

しかし、私は接続が12秒後にタイムアウトしたと言ってスローされた例外を取得します。これは、input = xmlcon.openInputStream();行以降に実行されます。

この場合、捕捉されるのはIOExceptionであり、このメソッドが呼び出される前にアクティブなネットワーク接続が存在するかどうかを判断します。私は何か見落としてますか?

EDIT:説明のために、これはアプリケーションのネットワーク接続の最初のインスタンスになります。このコードブロックを実行する前に、XMLファイルの取得を試みる前に、接続が可能であることを確認するための簡単なテスト:

答えて

1

問題が見つかりました。 URL(この場合は_xmlurl)には、直接TCP/IP接続が確立されていることを確認するために、";deviceside=true"を追加する必要がありました。これは、HttpConnectionがセルラネットワークを通じて行われることを保証します。言い換えれば、接続がBlackberry MDSを通じて行われていないことを確認することです。

また、チェックが必要だった。

if ((TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_WIFI)) && (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_WIFI))) 

のWi-Fiアンテナが上でした。上記が真であると評価された場合は、セルラーネットワークを回避するためにURL(_xmlurl)にさらに";interface=wifi"を追加する必要がありましたが、依然として直接TCP/IP接続を開きます。

1

マイク、すべてが正常に見えます。

  1. あなたのブラウザからURLを開くことができます。

    しかし、ここで考えていくつかのアイデアがありますか?

  2. どのようなBB Transportを使用して接続を開いていますか(たとえば、BESで失敗するかもしれませんが、Direct TCPまたはWi-FiでOkを実行するなど)
  3. この呼び出しの瞬間、「アクティブなネットワーク接続があるかどうかを判断する」というコードで、検出中に開いた可能性のある接続があればそれをすべて閉じますか?
+0

はい、URLはブラウザで開くことができます。私はあなたがBB Transportによって何を意味するのか分かりません。 –

+0

私はBESで実行するように設定していません(デフォルトでない限り)。それは、セルアンテナまたはwi-fi経由のTCP/IPでなければなりません。このアプリケーションでは、接続が開かれる最初のインスタンスになります。 –

+0

OK、DirectTCPまたはWiFi BB Transportsのみを使用しています。まあ、WifIでこれが動作しないようなものは見当たりませんが、DirectTCPにはいくつかの問題があるかもしれません(たとえば、プロバイダによっては、接続で送信されるデータの最大許容量を設定してトラフィックを制限する場合があります)。だから、私のアドバイスは、Wi-Fiの使用方法を見て、WiFi BB Transportだけを使って動作するようにすることです。 –

関連する問題