【发布时间】:2019-08-24 13:09:38
【问题描述】:
我已经建立了一个包含 3 列(标题、描述、类型)的房间数据库。我想用用户指定的类型(喜剧、恐怖等)查询类型列并返回结果。
DAO 接口
我希望查询只检索流派与用户选择的流派匹配的条目。
@Dao
public interface MovieDAO {
@Query SELECT * FROM movie_table WHERE genre")
pubic LiveData<List<Movie>> getAllMovies();
}
存储库类
在 Repository.class 中,我可以通过这种方式将用户选择的流派字符串传递给 Query 吗?
public class MovieRepository {
private MovieDao movieDao;
private LiveData<List<Movie>> allMovies;
public MovieRepository(Application application) {
MovieDatabase database = MovieDatabase.getInstance(application);
movieDao = database.MovieDao();
allMovies = movieDao.getAllMovies
}
public void findMoviesByGenre(String genre) {
movieDao.findMoviesByGenre(genre);
}
}
ViewModel 类
我不确定我是否在 findMovieByGenre() 方法中遗漏了什么
public class MovieViewModel exteneds AndroidViewModel {
private MovieRepository repository;
private LiveData<List<Movie>> allMovies
// Constructor,
public MovieViewModel(@NonNull Application application) {
super(application);
repository = new MovieRepository(Application)
allMovies = repository.getAllMovies();
}
**public void findMovieByGenre(String genre) {
repository.findMoviesByGenre(genre);
}**
}
活动
这是我真正苦苦挣扎的部分,活动如何调用 ViewModel 并传入流派字符串参数?我尝试了以下方法,但 observe 返回以下错误。
无法解析方法'observe(com.example.roomexample.MainActivity, anonymous android.arch.lifecycle.Observer>)'
如果我从 observe 中删除流派字符串,我会收到以下错误。
无法应用 MovieViewModel 中的 findMovieByGenre(String) 到 ()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
movieViewModel = ViewModelProviders.of(this). get(MovieViewModel.class);
movieViewModel.findMovieByGenre("comedy").observe(this, new Observer<List<Movie>>() {
@Override
public void onChanged(@Nullable final List<Movie> movies) {
Log.d("Movie", movies.get(num).getTitle());
Log.d("Movie", movies.get(num).getDescription());
Log.d("Movie", movies.get(num).getGenre());
}
});
}
总之我想匹配用户选择的流派,并将其与数据库中的流派条目进行匹配,并返回匹配结果。
我的代码基于以下教程。如果您有任何其他材料可以帮助我完成我的任务,请传递它。
这是我当前代码的链接。 https://github.com/Shawn-Nichol/RoomExample
【问题讨论】:
-
您能否详细说明您的问题或举个例子
-
如果您想详细查看我拥有的所有代码,我已经包含了一个指向 GitHub 的链接。
标签: android sql mvvm viewmodel android-room