簡體   English   中英

Android MVP-在演示者“ NullPointerException…空對象引用”中丟失視圖引用

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

  • 查看(strong)->演示者(strong)->模型(strong)->存儲庫
  • 查看<-(弱)演示者<-(弱)模型<-(弱)信息庫

..如此..強所有權,弱聽者;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM