2016-12-28 6 views
2

Ich versuche, das Beobachter-Muster in einem meiner Aktivitäten und stellen die folgende Ausnahme zu implementieren, wenn notifyObservers Aufruf:Observable.notifyObservers Nullpointer

java.lang.NullPointerException: Versuch Interface-Methode ‚int Java aufzurufen. util.List.size()‘auf null Objektreferenz

bei java.util.Observable.notifyObservers (Observable.java:131)

bei models.database.User.setPending (User.java:137)

Meine Implementierung ist ziemlich einfach: das Modell User ist das Observable und die Aktivität ist der Beobachter (was nicht wichtig sein sollte, weil der Aktivitätscode nie erreicht wird). Mein Ziel ist es, über jede Änderung in den Eigenschaften des Feldes informiert zu werden.

Dies ist der relevante Teil in User Klasse:

public class User extends Observable implements Parcelable { 

    private boolean pending; 

    public void setPending(boolean pending) { 
     synchronized (this) { 
      this.pending = pending; 
     } 
     setChanged(); 
     notifyObservers(this); 
    } 
} 

Gibt es einen Fehler in meiner Umsetzung oder in meinem Verständnis hier? Ich habe keine Ahnung, was falsch ist, und ich bevorzuge es zu lösen, anstatt zur RX-Implementierung überzugehen.

EDIT: Dies ist der MainActivity Code, der nie erreicht:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Get session variables from previous activity (LoginActivity/SplashActivity) 
    user = getIntent().getExtras().getParcelable(getString(R.string.e_user)); //Receiving user from previous activity, assured to be non-null 

    //Add observer on user, so we'll be able to update drawer in case of modification 
    user.addObserver(this); 
} 

@Override 
public void update(Observable observable, Object o) { 
    drawerBuilder.setUser(user); 
} 
+0

Welches ist Line # 137 in Benutzerklasse – Rahul

+0

@Rasi Die Zeile von 'notifyObservers'. –

+0

@NeriaNachum Können Sie den vollständigen Code – Rahul

Antwort

0

ich graben weiter und fand heraus, dass Retrofit, die Bibliothek, die ich verwenden, um HTTP-Anfragen zu machen, nicht Bauer überhaupt nicht anrufen, und ich habe nicht diesen Fehler Gesicht so weit, weil ich erhalten User in LoginActivity/SplashActivity und übergibt es an MainActivity mit Extras, so dass die User(Parcel in) Konstruktor (der einzige, den ich hatte).

Das Hinzufügen eines leeren Konstruktors zur Klasse User löste das Problem. Allerdings verstehe ich immer noch nicht, wie zuvor von Retrofit keine Ausnahme ausgelöst wurde.

-1

Es ist nicht möglich Null-Zeiger-Ausnahme auf boolean-Datentyp und seine Wrapper um eine Liste von Beobachtern zu bekommen. versuchen, wie wie unten

public class User extends Observable implements Parcelable { 

     private boolean pending; 

     public void setPending(boolean pending) { 

      this.pending = pending; 
      setChanged(); 
      notifyObservers(pending); 
     } 
    } 
+0

Es funktioniert nicht ... –

+0

Informationen, die Sie zur Verfügung stellen, ist nicht genug, um zu finden, wo der tatsächliche pblm auftritt. Bitte posten Sie Ihren Code wo Sie Ihr Benutzerobjekt in der vorherigen Aktivität senden und erklären Sie, was ist drawerBuilder – Nas

+0

Es hat keinen Einfluss auf das Problem überhaupt, weil dieser Code nie erreicht wird. –