HTTPS-соединение

я использую следующий код для установки HTTPS-соединения

    HttpsConnection httpConnector = null;
    InputStream in = null;
    Document doc ;
    String content = "";

            try 
                {
               httpConnector = (HttpsConnection)Connector.open(url,Connector.READ_WRITE);
                    httpConnector.setRequestMethod(HttpConnection.GET) ;
                    in = httpConnector.openInputStream();
                    byte[] data = new byte[in.available()];
                    int len = 0;
                    int size = 0;
                    StringBuffer raw = new StringBuffer();
                        while ( -1 != (len = in.read(data)) ) {
                            raw.append(new String(data, 0, len));
                            size += len;
                        }
                        content = raw.toString().trim();
                                }
                   catch(Exception ex)
                   {
                       ex.printStackTrace();
                       return false;  
                   }
                   try{
                    in.close();
                    in =null;
                    httpConnector.close();
                    httpConnector =null;

            }catch(Exception ex)
            {
                Dialog.alert("Error:" + ex.getMessage());
                return false;

            } 
            } 

я думаю, что могу установить соединение, но значения не приходят. я тестирую его на симуляторе, я не тестировал на устройстве


person rupesh    schedule 23.07.2010    source источник
comment
Я могу получить значение, используя httpconnection, используя тот же код   -  person rupesh    schedule 24.07.2010


Ответы (1)


Я думаю, что ваша ошибка в следующей строке:

byte[] data = new byte[in.available()];

Метод available() возвращает только то, сколько байтов сразу доступно для чтения из входного потока, но вы используете его для инициализации размера временного массива байтов. Поскольку возможно, что available() возвращает 0, возможно, вы инициализируете массив нулевой длины.

Было бы лучше просто инициализировать «данные» массивом фиксированной длины.

person Marc Novakowski    schedule 23.07.2010
comment
Это может быть просто совпадение по времени, когда HTTP-соединения имеют положительное значение для available(), тогда как HTTPS, возможно, возвращает 0. Не мешало бы попробовать просто заменить его массивом байтов фиксированной длины. - person Marc Novakowski; 24.07.2010
comment
я думаю, что для входного потока нет getLength() - person rupesh; 24.07.2010
comment
Я заменил in. available() некоторым статическим значением, скажем, 1024, но все равно ничего не отображается. - person rupesh; 24.07.2010
comment
Несколько дополнительных вопросов: это самозаверяющий сайт SSL или подписанный доверенным центром сертификации, таким как Verisign? Выбрасывает ли он какие-либо исключения? Можете ли вы попробовать это на реальном устройстве? - person Marc Novakowski; 24.07.2010
comment
я могу видеть значение, которое я использовал 100000 в качестве статического значения, но проблема в том, что я не хочу сохранять статическое значение, так что это альтернативная причина для этого - person rupesh; 24.07.2010
comment
Вы можете использовать небольшое значение, такое как 1024 — это всего лишь временный буфер для чтения байтов из входного потока. Если он недостаточно велик, чтобы вместить все тело вашего ответа, он просто будет продолжать цикл, выполняя больше операций чтения (и добавляя данные в ваш StringBuffer). Как только JVM покинет этот блок кода, массив байтов больше не будет ссылками и, следовательно, может быть удален сборщиком мусора, поэтому не беспокойтесь о том, что он использует память. - person Marc Novakowski; 24.07.2010
comment
Вы также можете взглянуть на класс IOUtilities для более простого способа чтения InputStream в массив байтов без необходимости настраивать временные буферы, циклы и т. д. - person Marc Novakowski; 24.07.2010