-1

J'ai un problème avec NullPointerException lorsque j'essaie d'accéder aux variables de l'objet i initialisé en classe interne. Mais à l'intérieur de la classe interne, tous les éléments sont définis, et tout va bien.Pourquoi ne puis-je pas initialiser les variables dans une classe interne anonyme?

public class FirebaseConnectionStream extends FirebaseConnection { 


    private Object DownloadResult; 

    public void publish(String path,Map<String,Object> map){ 
     try{ 
     DatabaseReference ref = database.getReference(path); 
     ref.updateChildren(map); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
public <T> PortfolioInfo download(String path,final T object){ 

    try{ 
     DatabaseReference ref = database.getReference(path); 
     ref.addValueEventListener(new ValueEventListener(){ 

      @Override 
      public void onCancelled(DatabaseError arg0) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onDataChange(DataSnapshot arg0) { 
       try{ 
       DownloadResult = arg0.getValue(object.getClass()); 
       PortfolioInfo p = (PortfolioInfo) DownloadResult; 
       System.out.println(p.getId()); // This line here works? 
       } 
       catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    return (PortfolioInfo) DownloadResult; // But this one does not? 

    } 

} 

Répondre

1

Les méthodes ValueEventListener sont asynchrones, lorsque vous essayez de revenir DownloadResult, onDataChange ne seront pas appelés encore et de ce DownloadResult sera nulle.