NPO в методе insert при использовании Room

при попытке создать запись в БД Sqlite используя Room, получаю NPE. Немного кода: Модель

@Entity
public class Elements {

    @PrimaryKey(autoGenerate = true)
    public long elementId;

    public String name;
    
    public Elements(String name){
        this.name = name;
    }
}

метод в Dao

    @Insert
    Maybe<Long> insert(Elements element); //NPE генерируется здесь

Хотя стоит флаг авто-генерации id, он не создается. Пробовал явно задавать elementId = 0, как пишут в некоторых ответах в интернете, но ситуация не меняется. Почитав документацию не совсем понял что значит "If the field type is long or int (or its TypeConverter converts it to a long or int), Insert methods treat 0 as not-set while inserting the item."

В какую сторону стоит копать?


Ответы (1 шт):

Автор решения: dbuzin

Проблема была немного глубже, dagger не инжектил зависимость в presenter. Было:

@InjectViewState
public class ActivityElementsPresenter extends MvpPresenter<ActivityElementsView> {
    @Inject
    ElementsDao elementsDao;

    // здесь должен быть вызов инжекта самого presenter

    public void addElement(Elements element){
        elementsDao.insert(element).subscribeOn(Schedulers.io())...
    }
}

Решение:

@InjectViewState
public class ActivityElementsPresenter extends MvpPresenter<ActivityElementsView> {
    @Inject
    ElementsDao elementsDao;

    public ActivityElementsPresenter(){
       App.getAppComponent().inject(this);//calling the dagger's injector to inject dependency.
    }

    public void addElement(Elements element){
        elementsDao.insert(element).subscribeOn(Schedulers.io())...
    }
}
→ Ссылка