我无法弄清楚如何在收到响应后从RequestBuilder的sendRequest()
方法返回String值。我提到similar question,建议使用Callback<String, String> callback
,但我无法弄清楚如何实现这一点。 Callback
的{{3}}没有任何示例。
我所拥有的是具有Requester
方法的类generateRequest()
,它应该使用RequestBuilder发出请求并在调用时返回String。 processResponse()
方法获取响应,解析它并返回我存储在output
中的String。当从另一个类调用output
时,如何返回此generateRequest()
字符串?
public String generateRequest() {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url.getUrl()));
builder.setHeader("Authorization", authHeader);
String title = null;
try {
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
GWT.log(exception.getMessage());
}
public void onResponseReceived(Request request, Response response) {
String output = processResponse(response);
}
});
} catch (RequestException e) {
GWT.log(e.getMessage());
}
return title;
}
答案 0 :(得分:2)
我认为你可能会误解某些东西。
您不能简单地返回一个String,因为该调用是异步的(即您无法返回String,因为在您希望返回时,String尚未可用)。 你可以简单地等到那里,直到通话结果准备就绪,但这是非常糟糕的做法;这就是为什么你会看到人们提出回调的原因。
答案 1 :(得分:1)
想象一下,这是代码:
statement01;
statement02;
String result = generateRequest(...);
statement04UsingResult;
statement05;
然后这将无效,因为在执行statement04UsingResult
之前结果将不可用。请求尚未完成。 (正如Andrej已经提到的那样)
要解决此问题,请拆分代码:
statement01;
statement02;
generateRequest(...);
创建一个新的void方法,它接受结果作为参数:
public void newMethod(String result) {
statement04UsingResult;
statement05;
}
并从onResponseRevieve
- 方法内部调用:
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
GWT.log(exception.getMessage());
}
public void onResponseReceived(Request request, Response response) {
newMethod(processResponse(response));
}
});
希望有所帮助。