我在我的演示项目中使用MVP,在我的View(片段)中我有两个editTexts(案例编号和用户名)和按钮。
在按钮上单击我想将该Case对象插入数据库。 所以,首先检查是否有相同数字的情况。如果它是假的,我会将它保存到数据库并通知用户案例保存在数据库中。否则,只是发回消息,该操作失败并再次尝试使用不同的号码。
因此,对象遍历图层,视图&gt; <演示者>型号&gt;库。 在Repository中检出条件并将消息发送回视图,通过相同的层,但反之亦然(Repository&gt; Model&gt; Presenter&gt; View)。
我记录所有错误的类,一切都很好。但当它回到Presenter时,我会在空对象引用上得到#34;对于我的观点。
在我的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());
}
...
答案 0 :(得分:0)
我猜您正在将演示者注入模型中,在这种情况下,请检查它是否与您的视图所持有(绑定)的那个实例相同。
简而言之。我认为模型正在保存对尚未设置视图的演示者新实例的引用。
将演示者标记为单例,或(更好地进行测试)将其作为构造函数参数传递给模型。
我还要指出,通常最好只在一个方向上保留强引用。.IE:
.. so ..所有权强,听众薄弱;-)