서버에 일부 데이터 리소스를 만들도록 POST 요청을 보냅니다. 응답 코드 201이 표시됩니다. 모두 정상입니다. 그러나 응답에서 2 헤더를 가져와야합니다. 이 헤더에는 작성된 자원의 속성이 들어 있습니다. ConnectionRequest의 API를 사용하여이를 수행하는 방법을 찾지 못했습니다.LWUIT IO ConnectionRequest : POST 요청, 응답의 헤더를받는 방법?
클래스에는 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);
이미 시도 - 해당 메서드가 호출되지 않았습니다. 이유를 모르겠어. 나 또한 getHeader()를 오버라이드하려고 시도했다. 같은 - 전화하지 않았다. 나는 initConnection (연결)을 무시하고 호출되었다. 시원한! 전달 된 연결을 저장하고 응답 코드 수신기에서 나중에 사용하려고 시도했지만 예외가 발생했습니다 (연결이 이미 닫혔습니다). – Zakhar
기본 구현을 호출 한 후 initConnection()에서 readHeaders()를 호출하면 나중에 buildRequestBody() 메서드가 호출 될 때 예외가 발생합니다 (오류 메시지는 "이미 시작된 요청을 수정할 수 없음"과 같은 오류입니다) . – Zakhar
메소드의 서명을 확인하십시오. 받은 응답이 2xx라면 호출해야합니다 (코드 참조). 다른 해결 방법은 수명주기에 적합하지 않습니다. –