Пробник Blackberry HttpConnection для запуска в симуляторе

Я хочу позвонить по URL-адресу и получить данные ответа по URL-адресу из моего приложения Blackberry. Для этого я использую 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 и проверил, что могу открыть любой веб-сайт в браузере. В чем проблема в моем коде?


person dev_android    schedule 06.02.2012    source источник


Ответы (4)


О работе в сети в инфраструктуре BlackBerry лучше почитать. Пожалуйста, ознакомьтесь с документацией BlackBerry.

Чтобы ваш код работал быстро - просто добавьте суффиксы к запрошенным URL-адресам - ";interface=wifi" для запуска через Wi-Fi или ";deviceside=false" для доступа по радио. Таким образом, ваш исходный URL-адрес будет «http://www.google.com;deviceside=false» или «http://www.google.com;interface=wifi».

person Eugen Martynov    schedule 06.02.2012

Возможно, вам следует показать экран, а затем создать рабочий поток для установления соединения. В любом случае, вы должны использовать ConnectionFactory в ОС >= 5.0, чтобы избежать «адских суффиксов», необходимых для управления этим в предыдущих версиях. Также обратите внимание, что при неудачном подключении обычно требуется 2 минуты до тайм-аута.

person Mister Smith    schedule 06.02.2012
comment
Вам действительно следует (нет, возможно) запустить http-выборку в отдельном потоке. То, что вы делаете, заставляет поток событий (и, следовательно, ОС) блокироваться в ожидании возврата getResponseCode(). Чего он может никогда не сделать, так как вы заблокировали ОС. - person Richard; 07.02.2012

MDS должен запуститься для доступа в Интернет, он будет работать как интерфейс между Симулятором и подключением к Интернету на рабочем столе.

person dev_android    schedule 07.02.2012

когда вы открываете http-соединение в Blackberry, ваш URL-адрес "http://www.google.com" также должен содержать суффикс соединения. Поэтому URL-адрес ur принимает вид "http://www.google.com"+connectionsuffix

если у вас есть обычный пакет gprs, тогда ваш URL станет "http://www.google.com"+";на стороне устройства =правда"

person User10001    schedule 11.07.2013