[英]Android MVP - loosing view reference in presenter “NullPointerException… null object reference”
我在演示项目中使用MVP,在View(片段)中,我有两个editTexts(案例编号和用户名)和按钮。
在“按钮”上,单击“我想将该Case对象插入数据库”。 因此,首先检查是否有相同编号的情况。 如果它是错误的,我将其保存到数据库中并通知用户该案例已保存在数据库中。 否则,仅发送回消息,该操作将失败,并使用其他号码重试。
因此,对象将遍历各层,依次单击“视图”>“ Presenter”>“模型”>“存储库”。 在“存储库签出条件并将消息发送回视图”中,穿过相同的图层,反之亦然(存储库>模型>演示者>视图)。
我Log.d所有类的错误,一切都很好。 但是当回到Presenter时,我的观点是“基于空对象引用”。
从Model调用的Presenter中的方法出现错误...
public void sameCaseNumberMessage(String string){
Log.d(TAG, "message from repository" + string);
view.showToastMessage(string); //but here, view is on a null object reference
}
在我看来 ...
@Inject
BottomFragmentContract.Presenter presenter;
...
@Override
public void onResume() {
super.onResume();
presenter.setView(this);
}
...
在我的主持人中...
@Nullable
private BottomFragmentContract.View view;
...
@Override
public void setView(BottomFragmentContract.View view) {
this.view = view;
Log.d(TAG, "Hashcode is fine : " + this.view.toString());
}
...
我猜您正在将演示者注入模型中,在这种情况下,请检查它是否与您的视图所持有(绑定)的那个实例相同。
简而言之。 我认为模型正在保存对尚未设置视图的演示者新实例的引用。
将演示者标记为单例,或(更好地进行测试)将其作为构造函数参数传递给模型。
我还要指出,通常最好只在一个方向上保留强引用。.IE:
..如此..强所有权,弱听者;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.