LWUIT IO ConnectionRequest: запрос POST, как получить заголовки ответа? - PullRequest
1 голос
/ 10 февраля 2012

Я отправляю запрос POST, чтобы создать некоторый ресурс данных на сервере. Я получаю код ответа 201 - все в порядке. Но мне также нужно получить 2 заголовка из ответа. Эти заголовки содержат атрибуты созданного ресурса. Я не нашел способ сделать это с помощью API ConnectionRequest.

Класс имеет методы, защищенные от readHeaders (соединение) и getHeader (соединение). Но я не смог их использовать, когда получил ответ - получил исключение.

Пример моего кода показан ниже:

ConnectionRequest reqresp = new ConnectionRequest () {
    protected  void buildRequestBody (java.io.OutputStream os) {
    Logger.inst ().write ("buildRequestBody");
        final String body = "Dummy Request Body"; // necessary for my request
        try {
            os.write (body.getBytes () );
        }
        catch (Exception ex) {
            final String errMsg = ex.toString ();
            Logger.inst ().write (errMsg);
            throw new RuntimeException (errMsg);
        }
    }

    protected void readResponse (InputStream input) throws IOException  {
        // Actually this method will not be called.
        Logger.inst ().write ("readResponse");
        String respText;
        try {
            respText = Util.readToString (input);
        }
        catch (Exception ex) {
            final String errMsg = ex.toString ();
            Logger.inst ().write (errMsg);
            throw new RuntimeException (errMsg);
        }
        Logger.inst ().write (respText);
    }
};
reqresp.setUrl ("MY SERVER URL");
reqresp.setPriority (ConnectionRequest.PRIORITY_HIGH);
reqresp.setPost (true);
reqresp.addRequestHeader ("header1", "val1");
reqresp.addRequestHeader ("Content-type", "application/json");
reqresp.addResponseCodeListener (new ActionListener () {
        public void actionPerformed (ActionEvent ae) {
            Logger.inst ().write ("ResponseCodeListener:");
            Logger.inst ().write (ae.toString () );
            if (ae instanceof NetworkEvent) {
                NetworkEvent evt = (NetworkEvent)ae;
                Logger.inst ().write ("message: " + evt.getMessage () );
                Logger.inst ().write ("response code: " + evt.getResponseCode () );
            }
        }
    });
reqresp.addResponseListener (
    new ActionListener () {
        public void actionPerformed (ActionEvent ae) {
            Logger.inst ().write ("ResponseCodeListener:");
            Logger.inst ().write (ae.toString () );
            if (ae instanceof NetworkEvent) {
                NetworkEvent evt = (NetworkEvent)ae;
                Logger.inst ().write ("message: " + evt.getMessage () );
                Logger.inst ().write ("response code: " + evt.getResponseCode () );
            }
        }
    }
);

NetworkManager.getInstance ().addToQueue (reqresp);

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Я не мог выполнить задачу, используя ввод-вывод LWUIT.Но я сделал это легко, используя HTTPConnection MIDP, и не встретил никаких проблем.

Один небольшой комментарий об API HTTPConnection MIDP.Это синхронно.Поэтому я не хотел использовать его в основном потоке графического интерфейса.Более того, API низкого уровня.Поэтому мне пришлось реализовать какую-то оболочку, чтобы скрыть детали и асинхронно выполнять HTTP-запрос в отдельном потоке.

Теперь один комментарий о классе IW ConnectionRequest LWUIT.Я нашел это программистом - недружелюбно.Он представляет собой запрос и ответ.Итак, неясно, какие методы связаны с запросом, а с ответом.

1 голос
/ 13 февраля 2012

Попробуйте что-то подобное в ConnectionRequest:

protected void readHeaders(Object connection) throws IOException {
    String val = getHeader(connection, "MyHeaderName");
}
...