2017-07-26 50 views
0

我觉得很蠢问这个和搜索similar questions,但我不明白为什么我能够设置private String title但无法得到它。Java - 无法获得从本地方法设置的私人字符串

我有一个类,使得HTTP请求获得一些JSON,解析它并设置实例变量从processResponse()。当我在setTitle()getTitle()中使用GWT.log()时,控制台显示setTitle()具有该值,但getTitle()undefined

我正在使用GWT,如果这有所作为。这个类将用于创建对象,这些变量将在整个程序中使用。我在这里做错了什么?

public class Requester { 
    //other variables 
    private String title; 

    public Requester(UrlBuilder url) { 
     this.setURL(url); 
     this.generateRequest(); 
    } 

    public void setURL(UrlBuilder url) { 
     this.url = url; 
    } 

    private void generateRequest() { 
     RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url.getUrl())); 
     builder.setHeader("Authorization", authHeader); 

     try { 
      builder.sendRequest(null, new RequestCallback() { 
       // onError() method 

       public void onResponseReceived(Request request, Response response) { 
        processResponse(response); 
       } 

      }); 
     } catch (RequestException e) { 
      //exception code 
     } 
    } 

    private void processResponse(Response response) { 
     //code to get title and assign it to String output 
     setTitle(output); 
    } 

    private void setTitle(String output) { 
     this.title = output; 
    } 

    public String getTitle() { 
     return this.title; 
    } 
} 
+0

在'processResponse'方法,其中/如何你访问变量'输出',用作'setTitle'的参数? –

+3

如果'setTitle'被调用并且设置了一个特定的值,并且后面的'getTitle'调用显示为'null',那么它与'Requester'中的* instance *不同。调用代码正在对另一个“请求者”对象进行调用。将日志语句插入到构造函数中进行确认,然后查看进行调用的代码,因为问题是* there *,而不是此代码中的代码。 – Andreas

+0

@ChrisSprague我为这个赋值声明了一个本地字符串 - 'String output = jsonArray.get(0).isObject()。get(“title”)。toString();' –

回答

0

我能够从我问过的related question的帮助中找出问题。

generateRequest()的异步调用在我拨打getTitle()时还没有完成。由于title没有设置在这一点,我得到undefined

基于对其他问题的建议,我修改了代码来执行,其中title被作为参数传递后generateRequest()做的方法 -

public void onResponseReceived(Request request, Response response) { 
        MyOtherClass.newMethod(processResponse(response)); 
       }