Как я могу создать ViewModel, содержащий объект DAO в Dager 2? - PullRequest
0 голосов
/ 23 марта 2019

Я создаю Android ViewModel в Activity:

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

Я узнал, что должен создать собственную фабрику, чтобы внедрить мою *От 1008 * до 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;
    }
}

а что делать дальше?Я вижу несколько способов.Если верить примерам из Google, я должен сделать следующее в MyActivity:

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

1) Но где мне взять eventDao в MyActivity?

2) Нужно ли создавать пользовательские ModelFactory для каждого ViewModel, если он использует класс Дао в?

Я использую Dagger 2, и я просто хочу понять, как я могу создать ViewModel с DAO и использовать это ViewModel в MyActivity?

1 Ответ

0 голосов
/ 17 апреля 2019

Вы вводите ViewModelFactory в упражнение.ViewModelFactory получит EventDao через внедрение конструктора.Вы передаете внедренный экземпляр ViewModelFactory, скажем, viewModelFactory , ViewModelProviders

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

...