I have a vocabulary room-database where words are divided into 4 categories (indicated in respective field of the table).
When the Activity launches, the method getWords()
from Dao is triggered with the required argument being passed by WorkActivity
.
What should I write to handover the value of List from Activity to Repository?
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();
categoryFilter = new ArrayList<>();
m4words = mWordDao.get4words(categoryFilter);
}
In ViewModel:
private ArrayList<Integer> categoryFilter = new ArrayList<>();
private WordRepository mRepository;
public WordViewModel(@NonNull Application application) {
mRepository = new WordRepository(application);
m4words = mRepository.get4words();
}
In WorkActivity:
private WordViewModel wordViewModel;
public ArrayList<Integer> categoryFilter = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
categoryFilter.add(2) // just for example, if I want to pass 2 to categoryFilter List in Reposotory.
wordViewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()))
.get(WordViewModel.class);
wordViewModel.getListLivedata().observe(this, words -> {
adapter.submitList(words);
});
//buildRecyclreVeiw
}
question from:
https://stackoverflow.com/questions/65936607/cannot-convey-value-from-activity-to-repository-to-pass-it-into-dao-method 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…