我发送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);
答案 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类的评论。我发现程序员不友好。它代表请求和响应。因此,不清楚这些方法与请求的关系以及响应的内容。