【问题标题】:How can I create ViewModel containing DAO object in Dager 2?如何在 Dager 2 中创建包含 DAO 对象的 ViewModel?
【发布时间】:2019-03-23 10:57:43
【问题描述】:

我在 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;
    }
}

但是接下来要做什么呢?我看到了几种方法。如果相信谷歌的例子,我必须在 MyActivity 中做下一步:

EventViewModel model = ViewModelProviders.of(this, new ModelFactory(eventDao)).get(EventViewModel.class);

1) 但是我在 MyActivity 中哪里可以得到eventDao

2) 如果每个 ViewModel 使用 dao 类,我是否需要为每个 ModelFactory 创建自定义 ModelFactory

我使用Dagger 2,我只是想了解如何使用DAO 创建ViewModel 并在MyActivity 中使用这个ViewModel

【问题讨论】:

  • 您可以创建DatabaseModule 类并提供该类的dao。所以你只需要在你的活动中@Injet the Dao
  • 请为您尝试使用@Inject配置的组件添加代码

标签: java android mvvm dagger-2


【解决方案1】:

您在活动中注入 ViewModelFactory。 ViewModelFactory 将通过构造函数注入获取 EventDao。您将注入的 ViewModelFactory 实例说 viewModelFactory 传递给 ViewModelProviders

EventViewModel model = ViewModelProviders.of(this, viewModelFactory).get(EventViewModel.class);

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多