如何在Dagger 2中创建包含DAO对象的View Model?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Dagger 2中创建包含DAO对象的View Model?相关的知识,希望对你有一定的参考价值。
我在Activity中创建了android ViewModel:
EventViewModel model = ViewModelProviders.of(this).get(EventViewModel.class);
为此,我创建了EventViewModel
:
public class EventViewModel extends ViewModel {
private final EventDao eventDao;
public EventViewModel(EventDao eventDao) {
this.eventDao = eventDao;
}
public void createEvent(final Event event) {
new Thread(new Runnable() {
@Override
public void run() {
eventDao.insert(event);
}
}).start();
}
}
我了解到我必须创建自定义工厂才能将EventDao
注入EventViewModel
。好吧,让我说我做到了。
public class ViewModelFactory implements ViewModelProvider.Factory {
private final EventDao eventDao;
@Inject
public ViewModelFactory(EventDao eventDao) {
this.eventDao = eventDao;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (modelClass == EventViewModel.class) {
return (T) new EventViewModel(eventDao);
}
return null;
}
}
但接下来该怎么办?我看到了几种方式。相信谷歌的例子,我必须在我的活动中做下一步:
EventViewModel model = ViewModelProviders.of(this, new ModelFactory(eventDao)).get(EventViewModel.class);
1)但是我在哪里可以获得MyActivity中的eventDao
?
2)如果使用dao类,我是否需要为每个ModelFactory
创建自定义ViewModel
?
我使用Dagger 2
,我只想了解如何用DAO创建ViewModel
并在MyActivity中使用这个ViewModel
?
您在活动中注入ViewModelFactory。 ViewModelFactory将通过构造函数注入获取EventDao。您将注入的ViewModelFactory实例称为viewModelFactory传递给ViewModelProviders
EventViewModel model = ViewModelProviders.of(this, viewModelFactory).get(EventViewModel.class);
以上是关于如何在Dagger 2中创建包含DAO对象的View Model?的主要内容,如果未能解决你的问题,请参考以下文章
在 dao room 数据库中创建一个带有 body 的自定义函数
如何在java中的每个arraylist中创建具有不同类型对象的arraylist数组?