2017-07-26 5 views
0

Je me sens stupide demandant ceci et recherché similar questions mais je ne comprends pas pourquoi je suis en mesure de définir private String title mais incapable de l'obtenir.Java - Impossible d'obtenir la chaîne privée qui a été définie à partir d'une méthode locale

J'ai une classe qui effectue une requête HTTP pour obtenir du JSON, l'analyser et définir les variables d'instance de processResponse(). Lorsque j'utilise GWT.log() à l'intérieur setTitle() et getTitle(), la console montre que setTitle() a la valeur mais getTitle() est undefined. J'utilise GWT si cela fait une différence.

Cette classe sera utilisée pour créer des objets et ces variables seront utilisées tout au long du programme. Qu'est-ce que je fais mal ici?

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

Dans la méthode 'processResponse', où/comment sont vous accédez à la variable 'output' qui est utilisée comme paramètre de' setTitle'? –

+3

Si 'setTitle' est appelé et définit une valeur particulière, et qu'un appel ultérieur à' getTitle' montre 'null', alors ce n'est pas la même * instance * de' Requester'. Le code appelant effectue l'appel sur un autre objet 'Requester'. Insérez l'instruction de log dans le constructeur pour confirmer, puis regardez le code qui fait les appels, puisque le problème est * là *, pas ici dans ce code. – Andreas

+0

@ChrisSprague J'ai déclaré une chaîne locale pour l'affectation - 'String output = jsonArray.get (0) .isObject(). Get (" title "). ToString();' –

Répondre

0

j'ai pu comprendre le problème avec l'aide d'un related question que je l'avais demandé. L'appel asynchrone à generateRequest() n'avait pas terminé au moment où j'appelais getTitle(). Puisque title n'était pas défini à ce moment-là, je recevais undefined.

Sur la base des suggestions de l'autre question, je modifié mon code pour exécuter une méthode où title a été passé en paramètre après generateRequest() a été fait -

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