Observable.notifyObservers 空指针异常

Observable.notifyObservers NullPointerException

我尝试在我的一项活动中实施观察者模式,但在调用 notifyObservers 时遇到以下异常:

java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference

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

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

我的实现非常简单:模型 User 是可观察的,activity 是观察者(这无关紧要,因为永远不会到达 activity 代码)。我的目标是在字段属性的每次更改时都收到通知。

这是User中的相关部分 class:

public class User extends Observable implements Parcelable {

    private boolean pending;

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

我的实现或我对这里的理解有什么缺陷吗?我不知道出了什么问题,我更愿意解决它而不是转向 RX 实现。

编辑: 这是 MainActivity 代码,从未达到:

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

无法在布尔数据类型及其带有观察者列表的包装器上获得空指针异常。尝试如下

   public class User extends Observable implements Parcelable {

        private boolean pending;

        public void setPending(boolean pending) {

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

我继续挖掘,发现我用来发出 HTTP 请求的库 Retrofit 根本不调用构造函数,到目前为止我没有遇到这个错误,因为我收到 UserLoginActivity/SplashActivity 中并使用 extras 将其传递给 MainActivity,因此使用 User(Parcel in) 构造函数(我唯一的构造函数)。

User class 添加一个空构造函数解决了这个问题。但是我还是不明白Retrofit之前怎么没有抛出异常