Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT-如何在收到响应后从RequestBuilder返回字符串值?_Java_String_Gwt_Callback - Fatal编程技术网

Java GWT-如何在收到响应后从RequestBuilder返回字符串值?

Java GWT-如何在收到响应后从RequestBuilder返回字符串值?,java,string,gwt,callback,Java,String,Gwt,Callback,我无法理解如何在收到响应后从RequestBuilder的sendRequest()方法返回字符串值。我提到了一个例子,其中建议使用回调,但我不知道如何实现它。for回调没有任何示例 我拥有的是一个类Requester,其方法是generateRequest(),它应该使用RequestBuilder发出请求,并在调用时返回一个字符串。processResponse()方法获取响应,对其进行解析并返回一个字符串,我将该字符串存储在output中。当从另一个类调用generateRequest()

我无法理解如何在收到响应后从RequestBuilder的
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));
            }
        });
希望有帮助