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



我发送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);

ConnectionRequest:中尝试类似的操作

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

我无法使用LWUIT的IO执行任务。但我使用MIDP的HTTPConnection轻松完成了任务,没有遇到任何问题。

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

现在有一条关于LWUIT的IO ConnectionRequest类的注释。我发现它对程序员不友好。它同时代表请求和响应。因此,目前尚不清楚哪些方法与请求相关,哪些方法与响应相关。

相关内容

  • 没有找到相关文章

最新更新