我发送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类的注释。我发现它对程序员不友好。它同时代表请求和响应。因此,目前尚不清楚哪些方法与请求相关,哪些方法与响应相关。