0

URLを呼び出して、BlackberryアプリのURLから応答データを取得したいと思います。そのために、私はを使用してHttpConnectionいます。これが私が使用しているコードです:

import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Dialog;

import javax.microedition.io.Connector;
import javax.microedition.io.ContentConnection;
import javax.microedition.io.HttpConnection;
import java.io.DataInputStream;
import java.io.IOException;

public class TestApp extends UiApplication {

   private MainScreen _mainScreen;

   private static TestApp _app;

   public TestApp(){
       _mainScreen = new MainScreen();

       LabelField testField = new LabelField("hello world");

       _mainScreen.add(testField);

       pushScreen(_mainScreen);

       HttpConnection c = null;
       DataInputStream dis = null;

       try {
        System.out.println("0");
        c = (HttpConnection)Connector.open("http://www.google.com");

        System.out.println("1");
        int rc = c.getResponseCode();
        System.out.println("2");
        if (rc != HttpConnection.HTTP_OK) {
            throw new IOException("HTTP response code: " + rc);
        }
        System.out.println("3");
        dis = c.openDataInputStream();
        System.out.println("4");
        int len = (int)c.getLength();
        if (len > 0) {
            byte[] data = new byte[len];
            dis.readFully(data);
        } else {
            int ch;
            while ((ch = dis.read()) != -1) {
                //...
            }
        }
       } catch(Exception e){
           e.printStackTrace();
       }finally {

           try {
                if (dis != null)
                    dis.close();
                if (c != null)
                    c.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            catch(NullPointerException e) {
                e.printStackTrace();
            }
       }

   } 

    public static void main(String[] args) {
         _app = new TestApp();
         _app.enterEventDispatcher();

  }  
}

シミュレーターでコードを実行しようとすると、「0」、次に「1」が表示され、その後、しばらくすると「スタックトレースがありません」がデバッグウィンドウに表示され、テキストが表示されるとすぐに、レベルアプリはテキストがシミュレータ画面に表示されます。シミュレーターでのインターネット接続に問題はありません。Wi-Fiをセットアップし、ブラウザーで任意のWebサイトを開くことができることをテストしました。私のコードの問題は何ですか?

4

4 に答える 4

2

おそらく、画面を表示してからワーカー スレッドを生成して接続を行う必要があります。とにかく、ConnectionFactoryOS >= 5.0 で使用して、以前のバージョンでこれを管理するために必要な「地獄のサフィックス」を回避する必要があります。また、接続に失敗すると、タイムアウトまで通常 2 分かかることにも注意してください。

于 2012-02-06T22:44:21.030 に答える
2

BlackBerry インフラストラクチャでのネットワークについて読むことをお勧めします。BlackBerry のドキュメントを参照してください。

コードをすばやく動作させるには、要求された URL にサフィックスを追加するだけです。";interface=wifi" を WiFi 経由で実行するか、";deviceside=false" を無線経由で実行します。したがって、元の URL は「http://www.google.com;deviceside=false」または「http://www.google.com;interface=wifi」になります。

于 2012-02-06T20:41:03.677 に答える
1

MDS は、インターネット アクセスのために起動する必要があります。これは、シミュレーターとデスクトップのインターネット接続の間のインターフェイスとして機能します。

于 2012-02-07T12:22:03.357 に答える
0

ブラックベリーで http 接続を開くと、URL "http://www.google.com" には接続サフィックスも含まれている必要があります。したがって、URL は次の形式になります "http://www.google.com"+connectionsuffix

通常の gprs パックを使用している場合、URL は " http://www.google.com "+";deviceside=true"になります。

于 2013-07-11T19:48:38.760 に答える