LWUIT IO ConnectionRequest:POST请求,如何获取响应的标头?

时间:2012-02-10 16:49:39

标签: web-services rest java-me lwuit midp

我发送POST请求以在服务器上创建一些数据资源。我得到了响应代码201 - 一切都好。但我还需要从响应中获取2个标头。这些标头包含已创建资源的属性。我没有找到使用ConnectionRequest API的方法。

该类具有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 个答案:

答案 0 :(得分:1)

ConnectionRequest

中尝试这样的事情
protected void readHeaders(Object connection) throws IOException {
    String val = getHeader(connection, "MyHeaderName");
}

答案 1 :(得分:1)

我无法使用LWUIT的IO执行任务。但是我很容易使用MIDP的HTTPConnection并且没有遇到任何问题。

关于MIDP的HTTPConnection API的一个小评论。这是同步的。所以,我不想在主GUI线程中使用它。而且,API是低级的。所以,我必须实现某种包装来隐藏细节并在一个单独的线程中异步执行HTTP请求。

现在有一条关于LWUIT的IO ConnectionRequest类的评论。我发现程序员不友好。它代表请求和响应。因此,不清楚这些方法与请求的关系以及响应的内容。