Не получается передать данные из Activity в Repository для подстановки в аргумент Dao-метода
У мне в room-базе содержится словарь, слова поделены на 4 категории (0, 1, 2 и 3) - указаны в ссот поле таблицы. При запуске WorkActivity вызывается метод get4words() из Dao, где аргументом является List из цифр, в него-то и добавляются категории, сохраненные в sharedPreferences. Мне нужно Но при загрузке активити появляется ошибка Cannot create an instance of class space.rodionov.englishwanker.WordViewModel где я что не так передаю? как сделать чтоб заработало?
In Dao:
@Query("SELECT * FROM word_table WHERE category IN(:filterCategory) ORDER BY RANDOM() LIMIT 4")
Single<List<Word>> get4words(List<Integer> filterCategory);
In Repository:
public class WordRepository {
private ArrayList<Integer> categoryFilter;
private WordDao mWordDao;
//other variables
WordRepository(Application application) {
WordDatabase db = WordDatabase.getDatabase(application);
mWordDao = db.WordDao();
clearFilter();
setFilter(categoryFilter);
m4words = mWordDao.get4words(categoryFilter);
}
public void clearFilter(){
categoryFilter.clear();
}
public void setFilter(ArrayList<Integer> categoryFilter) {
this.categoryFilter = categoryFilter;
}
In ViewModel:
private ArrayList<Integer> categoryFilter = new ArrayList<>();
private WordRepository mRepository;
// declaring variables
public WordViewModel(@NonNull Application application) {
mRepository = new WordRepository(application);
//declaring
mRepository.setFilter(categoryFilter);
m4words = mRepository.get4words();
//здесь описано как вынимаются данные в рабочем потоке, этот код проверен и ошибок нет, его не пишу так как он объемный.
}
public void clearFilter() {
categoryFilter.clear();
}
public void setFilter(ArrayList<Integer> categoryFilter) {
this.categoryFilter = categoryFilter;
}
//other methods
In WorkActivity:
private WordViewModel wordViewModel;
public ArrayList<Integer> categoryFilter = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences = getSharedPreferences("save", MODE_PRIVATE);
boolean category0 = sharedPreferences.getBoolean("Category0", true);
boolean category1 = sharedPreferences.getBoolean("Category1", true);
//other catigories from memory ...
//
wordViewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
.get(WordViewModel.class);
wordViewModel.getListLivedata().observe(this, words -> {
adapter.submitList(words);
});
//
wordViewModel.clearFilter();
if (category0 == true) {
categoryFilter.add(0);
Log.d(TAG, "onCreate: common_words added: called");
}
//other categories
wordViewModel.setFilter(categoryFilter);
//other methods
//buildRecyclreVeiw
}