シミュレータで実行するBlackberry HttpConnection prob

私はURLを呼び出し、私のブラックベリーアプリからの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」、その後、長時間「No stack trace」がデバッグウィンドウに表示され、テキストが表示されると、テキストはシミュレータ画面に表示されます。シミュレータのインターネット接続には問題はありません。私はWi-Fiをセットアップしており、ブラウザで任意のウェブサイトを開くことができることをテストしました。私のコードの問題は何ですか?

0

4 答え

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

あなたのコードを素早く動かすには - 要求されたURLに接尾辞を追加するだけです " - interface = wifi"したがって、あなたのオリジナルURLは「http://www.google.com; deviceside = false」または「http://www.google.com; interface = wifi」になります。

2
追加された

Maybe you should show the screen and then spawn a worker thread to do the connection. Anyway, you should use ConnectionFactory in OS >= 5.0 to avoid the "hell of suffixes" it takes to manage this in prior versions. Also note that a failed connection will usually take 2 minutes to timeout.

2
追加された
あなたは本当に(たぶん)別のスレッドでhttpのフェッチを実行する必要があります。あなたがやっていることは、イベントスレッド(したがってOS)がgetResponseCode()が戻るのを待つのをブロックさせることです。あなたがOSをブロックしてから、決してできないことがあります。
追加された 著者 Richard,

MDSはインターネットアクセスを開始する必要があり、Simulatorとデスクトップインターネット接続の間のインターフェイスとして機能します。

1
追加された

when you open http connection in blackberry your url "http://www.google.com" should also contain connection suffix.so ur url become of the form "http://www.google.com"+connectionsuffix

あなたは通常のgprsパックしている場合、あなたのURLになる " http://www.google.com " + "; deviceside = true"

0
追加された