3

シミュレーターから単純な HttpConnection を開くときに問題が発生しました。URL に deviceside=true サフィックスを追加しましたが、まだ機能していません。応答コード 0 の空の httpconnection を受信して​​います。これは私に問題を与えているコード:

public void readUrl(){
     HttpConnection conn=null;
        try {
            conn = (HttpConnection) Connector.open("http://www.google.com;deviceside=true");
            conn.setRequestMethod("GET");
             if(conn.getResponseCode()==HttpConnection.HTTP_OK){
                 System.out.println("Create connection sucessfully");
             }

        } catch (ConnectionNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }




        DataInputStream din=null;
        ByteVector responseBytes=null;
        try {
            din = conn.openDataInputStream();
             responseBytes = new ByteVector();
              int i = din.read();
              while (-1 != i) {
                responseBytes.addElement((byte) i);
                i = din.read();
              }
        } catch (IOException e) {
            //TODO: HANDLE EXCEPTIONS
            e.printStackTrace();
        }
        responseBytes.toArray();

何が起こっているのかわかりません。deviceside=true を追加することで、直接接続する必要があると想定されていました。とにかく、MDS サーバーをインストールして、URL を deviceside=false に設定しようとしましたが、結果は同じでした。

http://localhost:8080/resources/mypage.htmlのようなローカル URL を使用して同じコードをテストしたところ、期待どおりに機能したため、シミュレーターの構成の問題ではないかと考えていました。どうすれば解決できますか?

どうもありがとう。

4

4 に答える 4

3

私の経験では、MDS シミュレーターを使用する場合は ;deviceside=true を追加する必要があります。blackberry.com フォーラムには、使用すべき接続サフィックスを決定する方法を示す素晴らしい投稿と、BlackBerry での接続の使用に関する一般的なアドバイスがあります。

リクエストのコンテンツを簡単に取得できるようにするために、IOUtilities クラスを使用できます。

InputStream stream = conn.openInputStream();
String contents = new String(IOUtilities.streamToBytes(stream));
于 2011-04-14T16:54:20.050 に答える
2

シミュレーターのセットアップタブの「一般」で、「シミュレーターを使用してMDS-CSを起動する」にチェックを入れていますか?その場合、接尾辞を追加する必要はまったくありません...

于 2011-04-14T17:39:55.487 に答える
2

";deviceside=true" は DIRECT TCP トランスポート用です。MDS トランスポートを使用するには、「;deviceside=false」を追加する必要があります。

デバイス シミュレーターで実行すると、MDS シミュレーターを起動しなくても DIRECT TCP トランスポートを使用できます。ただし、MDS トランスポートをテストする場合は、デバイス シミュレーターを開始する前に MDS シミュレーターを開始する必要があります。

于 2011-04-14T19:33:52.643 に答える
1

そうです、 deviceside=true でインターネット接続が使用されましたが、代わりにこのコードを使用すると、HttpConnection クラスに問題があるように見えました。

public StreamConnection openConnection(){
    StreamConnection conn=null;
    try {
        conn = (StreamConnection) Connector.open(url+";deviceside=true");
        //conn.setRequestMethod(httpMethod);

    } catch (ConnectionNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }

    return conn;


}

それは正しく機能したので、何か疑問に思っていました...ブラックベリーで接続を開くときに、応答コードを確認するためのコードを配置する必要があります。接続を作成した後ですか?上記のコードのように、または次のような dataStream を開いた後:

din = conn.openDataInputStream();

         responseBytes = new ByteVector();
          int i = din.read();
          while (-1 != i) {
            responseBytes.addElement((byte) i);
            i = din.read();
          }

ありがとう。

于 2011-04-15T15:43:17.460 に答える