gpt4 book ai didi

java - Observable.notifyObservers 空指针异常

转载 作者:行者123 更新时间:2023-11-29 09:28:03 26 4
gpt4 key购买 nike

我尝试在我的一个 Activity 中实现观察者模式,但在调用 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 类中的相关部分:

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

最佳答案

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

User 类添加一个空的构造函数解决了这个问题。但是,我仍然不明白为什么 Retrofit 之前没有抛出任何异常。

关于java - Observable.notifyObservers 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41367350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com