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())...
}
}