Я настроил базу данных комнаты с 3 столбцами (заголовок, описание, жанр).Я хочу запросить столбец жанра с указанным пользователем жанром (комедия, ужасы и т. Д.) И вернуть результаты.
Интерфейс DAO
Я хочу, чтобы запрос извлекал только записи, жанр которых соответствует жанру, выбранному пользователем.
@Dao
public interface MovieDAO {
@Query SELECT * FROM movie_table WHERE genre")
pubic LiveData<List<Movie>> getAllMovies();
}
Класс репозитория
В Repository.class я могу передать выбранную пользователем жанровую строку в запрос таким образом?
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);
}**
}
Activity
Это часть, с которой я действительно борюсь, как действие вызывает ViewModel и передает строковый параметр жанра?Я попробовал подход, описанный ниже, но наблюдать возвращает следующую ошибку.
Не удается разрешить метод 'наблюдения (com.example.roomexample.MainActivity, anonymous android.arch.lifecycle.Observer>) '
Если я удаляю строку жанра из наблюдения , я получаю ошибку ниже.
findMovieByGenre (String) в MovieViewModel нельзя применить к ()
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