【问题标题】:GWT - How to return a String value from RequestBuilder after receiving a response?GWT - 收到响应后如何从 RequestBuilder 返回字符串值?
【发布时间】:2017-07-27 20:08:44
【问题描述】:

在收到响应后,我无法弄清楚如何从 RequestBuilder 的 sendRequest() 方法返回字符串值。我提到了similar question,建议使用Callback<String, String> callback,但我不知道如何实现这一点。 CallbackGWT documentation 没有任何示例。

我有一个类 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;
}

【问题讨论】:

    标签: java string gwt callback


    【解决方案1】:

    我想你可能误会了什么。

    你不能简单地返回一个字符串,因为调用是异步的(即你不能返回字符串,因为字符串在你希望返回的时候还不可用)。 您可以简单地在那里等到调用结果准备好,但这确实是一种糟糕的做法;这就是为什么你会看到有人建议回调。

    【讨论】:

      【解决方案2】:

      想象一下,这是代码:

      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));
                  }
              });
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-04-21
        • 2021-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-07
        • 1970-01-01
        相关资源
        最近更新 更多