Как проверить, существует ли идентификатор фильма в моем приложении в моей БД или нет

#java #android #android-studio #mvvm #dao

#java #Android #android-studio #mvvm #dao

Вопрос:

Я использую модель Room View

я хочу проверить, существует ли идентификатор фильма в БД или нет, чтобы узнать, добавил ли пользователь его в избранное или нет, чтобы изменить цвет кнопки и текст и удалить его из БД, если кнопка нажата снова.

Я не знаю, как реализовать оператор if для его реализации, я много чего перепробовал, но это не работает.

это мой MovieDetailActivity

 public class MovieActivity extends AppCompatActivity {

    private RecyclerView.LayoutManager rvLayout;

    public Context context;

    // Constant for default task id to be used when not in favourite
    private static final int DEFAULT_TASK_ID = -1;

    ToggleButton button;
    AppDatabase appDatabase;
    Movie movie;
    int id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.movies_details);

        appDatabase = AppDatabase.getInstance(getApplicationContext());

        Intent intent = getIntent();
        movie = intent.getParcelableExtra("get_data");

        id = movie.getId();


        checkFavorite();

        if (id != DEFAULT_TASK_ID) {
            AddTaskViewModelFactory factory = new AddTaskViewModelFactory(appDatabase, id);
            final AddTaskViewModel viewModel = ViewModelProviders.of(this, factory).get(AddTaskViewModel.class);
            viewModel.getTask().observe(this, new Observer<Movie>() {
                @Override
                public void onChanged(Movie movie) {
                    viewModel.getTask().removeObserver(this);
                    button.setTextOn("Added");
                    button.getResources().getColor(R.color.colorGreen);
                }
            });
        }

        button.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

                if (b) {
                    compoundButton.setBackgroundColor(ContextCompat.getColor(compoundButton.getContext(), R.color.colorGreen));
                    addToFavourite();
                } else {
                    compoundButton.setBackgroundColor(ContextCompat.getColor(compoundButton.getContext(), R.color.colorGrey));
                    deleteFromFavourite();
                }
            }
        });

    }

    public void addToFavourite() {
        AppExecutors.getInstance().diskIO().execute(() -> {
            appDatabase.movieDao().insert(movie);
            Log.d("the movie ID added  "   id, "   good");
        });
    }

    public void deleteFromFavourite() {
        AppExecutors.getInstance().diskIO().execute(() -> {
            appDatabase.movieDao().delete(movie);
            Log.d("the movie ID deleted  "   id, "   bad");

        });
    }

    public void checkFavorite() {
        AppExecutors.getInstance().diskIO().execute(() -> {

            appDatabase.movieDao().getAllMovies(id);

            if (appDatabase.movieDao().check(id) != 0) {
                button.setTextOn("Added");
                button.getResources().getColor(R.color.colorGreen);
            }
            Log.d("the movie ID deleted  "   id, "   bad");
        });
    }

}

  

это мой Dao

 @Dao
public interface MovieDao {

    @Query("SELECT * FROM Movies_Table WHERE id = :id")
    LiveData<Movie> getAllMovies(int id);

    @Update()
    void update(Movie m);

    @Query("SELECT id FROM Movies_Table WHERE id = :id")
    int check(int id);

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insert(Movie m);

    @Delete()
    void delete(Movie m);

    @Query("SELECT * FROM Movies_Table ")
    LiveData<List<Movie>> getAllMovies();

}
  

Ответ №1:

Попробуйте изменить метод DAOs check :

     @Query("SELECT count(id) FROM Movies_Table WHERE id = :id")
    int check(int id);
  

и он вернет 0, если фильм с идентификатором не существует, и ненулевой, если он существует в таблице

Комментарии:

1. но если у меня уже есть фильм в моей БД и я проверяю наличие другого, он также вернет ненулевое значение, я прав??