Проблемы с открытием http соединения с симулятора blackberry - PullRequest
3 голосов
/ 14 апреля 2011

У меня проблемы при открытии простого соединения HttpConnection с симулятора, я добавил суффикс deviceide = true к своему URL, однако он все еще не работает, я получаю пустое соединение http с кодом ответа 0. Вот код, который доставляет мне проблемы:

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();

Понятия не имею, что происходит. Предполагается, что, добавив deviceide = true, он должен подключиться напрямую. Как бы то ни было, я тоже пытался установить сервер MDS и установить для моего URL-адреса deviceside = false, но результат был тот же.

Теперь я тестировал тот же код, используя локальный URL-адрес, такой как http://localhost:8080/resources/mypage.html,, и он работал как ожидалось, поэтому мне было интересно, не может ли это быть проблемой конфигурации симулятора. Как я могу решить это?

Большое спасибо.

Ответы [ 4 ]

3 голосов
/ 14 апреля 2011

По моему опыту, вам нужно добавить; deviceside = true при использовании симулятора MDS.На форумах blackberry.com есть отличный пост , в котором показано, как определить, какой суффикс подключения вы должны использовать, а также некоторые полезные советы по использованию подключений в BlackBerry.

Чтобы облегчить получение содержимого вашего запроса, вы можете использовать класс IOUtilities:

InputStream stream = conn.openInputStream();
String contents = new String(IOUtilities.streamToBytes(stream));
2 голосов
/ 14 апреля 2011

"; deviceside = true" - для ПРЯМОГО транспорта TCP. Чтобы использовать транспорт MDS, вам нужно добавить «; deviceside = false».

При запуске на симуляторе устройства вы можете использовать DIRECT TCP транспорт без необходимости запуска симулятора MDS. Однако, если вы хотите проверить транспорт MDS, вам нужно запустить симулятор MDS, прежде чем запускать симулятор устройства.

2 голосов
/ 14 апреля 2011

На вкладках настройки симулятора «Общие» проверяется ли «Запуск MDS-CS с симулятором»?Если это так, вам вообще не нужно добавлять суффикс ...

1 голос
/ 15 апреля 2011

Да, вы правы, с deviceide = 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;


}

Это работало правильно, поэтому мне было интересно ... при открытии соединения в blackberry, где я должен поместить свой код для проверки кода ответа. После создания соединения? как в коде выше или после открытия dataStream, например:

din = conn.openDataInputStream();

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

Спасибо.

...