[英]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.