Http POST в BlackBerry

Привет,

Я пытаюсь настроить подключение к серверу из моего приложения BlackBerry. Мне удалось получить код ответа о состоянии сервера. Теперь у меня есть несколько значений, которые я должен отправить на сервер.

Это как значения страницы регистрации (имя пользователя, пароль, возраст) должны быть отправлены на сервер.

        ConnectionFactory connFact = new ConnectionFactory();
        ConnectionDescriptor connDesc;
        connDesc = connFact.getConnection(url);
        if (connDesc != null)
        {
            HttpConnection httpConn;
            httpConn = (HttpConnection)connDesc.getConnection();
            try
            {
                final int iResponseCode = httpConn.getResponseCode();
                UiApplication.getUiApplication().invokeLater(new Runnable()
                {
                    public void run()
                    {
                        Dialog.alert("Response code: " + Integer.toString(iResponseCode));
                    }
                });
            }
            catch (IOException e)
            {
                System.err.println("Caught IOException: " + e.getMessage());
            }
        }

Это код, который я использовал для получения кода ответа. Я был бы признателен, если бы кто-нибудь помог мне, как я могу сделать POST-запрос на сервер. URL-адрес сервера для статуса был company.com/app/version/stats

когда это для регистрации, это будет company.com/app/register

Спасибо


person alanvabraham    schedule 31.05.2011    source источник


Ответы (2)


Какой тип POST вы используете? Если вы просто передаете пары ключ-значение, то это должен быть POST типа содержимого "application/x-www-form-urlencoded".

Итак, вам не хватает кода:

1). Установите правильный тип контента для вашего соединения:

httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

2). Подготовьте содержимое для отправки на сервер через POST:

URLEncodedPostData encPostData = new URLEncodedPostData("UTF-8", false);
encPostData.append("username", username);
encPostData.append("password", password);
encPostData.append("age", age);
byte[] postData = encPostData.toString().getBytes("UTF-8");

3). Установите длину содержимого для соединения (этот шаг может быть необязательным — попробуйте сначала без этого, возможно, ОС BB достаточно умна, чтобы установить это автоматически):

httpConn.setRequestProperty("Content-Length", String.valueOf(postData.length));

4). Откройте OutputStream и напишите в него содержимое (код упрощен):

OutputStream os = httpConn.openOutputStream();
os.write(postData);
os.flush();
person Vit Khudenko    schedule 31.05.2011
comment
Привет, это дает исключение нулевого указателя. Что-то, связанное с OutputStream и postData, но postData имеет какое-то значение, я не знаю, почему он дает исключение нулевого указателя. - person Ahmad Shahwaiz; 14.11.2012
comment
@AhmadShahwaiz: Пожалуйста, задайте отдельный вопрос SO, опубликовав свой код и трассировку стека. - person Vit Khudenko; 14.11.2012
comment
@Archimed У меня есть, пожалуйста, если вы можете ответить на это, спасибо. : stackoverflow.com/questions/13377021/< /а> - person Ahmad Shahwaiz; 14.11.2012

person    schedule
comment
я получил код ответа как успешный, но значения не были добавлены на сервер.. - person alanvabraham; 31.05.2011
comment
Используйте wireShark для проверки отправленного запроса. Если это правильно, то ошибка на стороне сервера (возможно, вам нужно добавить User-Agent или что-то еще ..) - person oxigen; 31.05.2011