Java GWT-如何在收到响应后从RequestBuilder返回字符串值?
我无法理解如何在收到响应后从RequestBuilder的Java GWT-如何在收到响应后从RequestBuilder返回字符串值?,java,string,gwt,callback,Java,String,Gwt,Callback,我无法理解如何在收到响应后从RequestBuilder的sendRequest()方法返回字符串值。我提到了一个例子,其中建议使用回调,但我不知道如何实现它。for回调没有任何示例 我拥有的是一个类Requester,其方法是generateRequest(),它应该使用RequestBuilder发出请求,并在调用时返回一个字符串。processResponse()方法获取响应,对其进行解析并返回一个字符串,我将该字符串存储在output中。当从另一个类调用generateRequest()
sendRequest()
方法返回字符串值。我提到了一个例子,其中建议使用回调
,但我不知道如何实现它。for回调
没有任何示例
我拥有的是一个类Requester
,其方法是generateRequest()
,它应该使用RequestBuilder发出请求,并在调用时返回一个字符串。processResponse()
方法获取响应,对其进行解析并返回一个字符串,我将该字符串存储在output
中。当从另一个类调用generateRequest()
时,如何返回此output
字符串
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;
}
我想你可能误解了什么 您不能简单地返回字符串,因为调用是异步的(也就是说,您不能返回字符串,因为字符串在您希望返回它的时候还不可用)。
您可以在那里等待,直到调用结果准备就绪,但这确实是一种可怕的做法;这就是为什么你看到有人建议回调。想象一下,下面是代码:
statement01;
statement02;
String result = generateRequest(...);
statement04UsingResult;
statement05;
那么这将不起作用,因为在执行语句04usingresult
之前,结果将不可用。请求尚未完成。(安德烈已经提到)
要解决此问题,请拆分代码:
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));
}
});
希望有帮助