Я пытаюсь добавить данные в свою базу данных, но не знаю, как заставить метод выполняться. Я уже создал интерфейс доступа к данным и метод вставки. Я могу ошибаться, но я также не уверен, что вставляю правильные поля. Это мой первый раз, когда я использую комнату. Это метод addToFavourites внизу в «mFavorites» onSetClickListener.
*Кинокласс добавлен ниже
public class DetailActivity extends AppCompatActivity {
public static final String KEY_EXAMPLE = "hNCmb-4oXJA";
private static final String KEY_ID = "id";
private static final String KEY_URL = "key";
private static final String KEY_NAME = "name";
private RequestQueue mRequestQueue;
private MovieDataBase database;
ArrayList<TrailerRequest> mTrailerList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.movie_detail_actvity);
ImageView imageView = findViewById(R.id.image_iv);
mRequestQueue = Volley.newRequestQueue(this);
mTrailerList = new ArrayList<>();
/* database instance */
database = MovieDataBase.getInstance(getApplicationContext());
ImageView mFavourites = findViewById(R.id.fav_image_view);
ImageView mPlayTrailer = findViewById(R.id.trailer_image_view);
// String intents for catching the data (String constants) from Main activity for displaying data in the detail activity
Intent intent = getIntent();
String posterUrl = intent.getStringExtra(Constants.EXTRA_URL);
String title = intent.getStringExtra(Constants.TITLE_TEXT);
String overview = intent.getStringExtra(Constants.OVERVIEW_TEXT);
String releaseDate = intent.getStringExtra(Constants.RELEASE);
String voteAverage = intent.getStringExtra(Constants.VOTE_AVERAGE);
final String movieId = intent.getStringExtra(MOVIE_ID);
// Detail activity title TextView
TextView textView = findViewById(R.id.title_text_view);
// Detail activity OverView TextView
TextView overViewText = findViewById(R.id.plot_synopsis_text_view);
// Detail activity ReleaseDate TextView
TextView releaseTextView = findViewById(R.id.release_date_text_view);
// Detail activity user ratings TextView
TextView voteAverageTextView = findViewById(R.id.user_rating_text_view);
TextView movieIdTextView = findViewById(R.id.movie_id);
// Load Detail activity ImageView using Picasso
Picasso.get()
.load(Utils.buildPosterUrl(posterUrl))
.fit()
.centerInside()
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.sample_7)
.into(imageView);
// set data on to views
textView.setText(title);
overViewText.setText(overview);
releaseTextView.setText(releaseDate);
voteAverageTextView.setText(String.format(getString(R.string.user_rating_tv), voteAverage));
movieIdTextView.setText(movieId);
mFavourites.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addToFavourites(args????)//I don't know what to do here
Toast.makeText(DetailActivity.this, "Added to Favourites", Toast.LENGTH_SHORT).show();
}
});
mPlayTrailer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playTrailer();
}
});
mReadReviews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(DetailActivity.this, "Show Reviews", Toast.LENGTH_SHORT).show();
}
});
}
private void playTrailer() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v = " + KEY_URL));
startActivity(intent);
}
private void addToFavourites(final Movies movies) {
AppExecutors.getInstance().diskIO().execute(new Runnable() {
@Override
public void run() {
database.movieDao().insert(movies);
}
});
}
@Dao
public interface MovieDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(example.android.popularmoviesvolley.Models.Movies[] movies);
@Delete
void delete(Movies[] movie);
@Query("DELETE FROM movie_table")
void deleteAllMovies();
//This is where we get all movies displayed in the recycler view (COME BACK TO THIS!!)
@Query("SELECT * FROM movie_table")
LiveData<List<Movie>> getAllMovies();
}
@Entity(tableName = "movie_table") Открытый класс Movies реализует Parcelable {
@PrimaryKey
private int id;
private String mId;
private String mOriginalTitle;
private String mPosterPath;
private String mOverview;
private String mReleaseDate;
private String mVoteAverage;
public Movies(String id, String posterPath, String originalTitle, String overview, String release_date, String voteAverage) {
this.mId = id;
this.mPosterPath = posterPath;
this.mOriginalTitle = originalTitle;
this.mOverview = overview;
this.mReleaseDate = release_date;
this.mVoteAverage = voteAverage;
}
@Ignore
public Movies(Parcel parcel) {
mId = parcel.readString();
mOriginalTitle = parcel.readString();
mPosterPath = parcel.readString();
mOverview = parcel.readString();
mReleaseDate = parcel.readString();
mVoteAverage = parcel.readString();
}
@Ignore
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mId);
dest.writeString(mOriginalTitle);
dest.writeString(mPosterPath);
dest.writeString(mOverview);
dest.writeString(mReleaseDate);
dest.writeString(mVoteAverage);
}
public static final Creator<Movies> CREATOR = new Creator<Movies>() {
@Override
public Movies createFromParcel(Parcel in) {
return new Movies(in);
}
@Override
public Movies[] newArray(int size) {
return new Movies[size];
}
};
@Ignore
@Override
public int describeContents() {
return 0;
}
public String getmOriginalTitle() {
return mOriginalTitle;
}
public void setmOriginalTitle(String mOriginalTitle) {
this.mOriginalTitle = mOriginalTitle;
}
public String getmOverview() {
return mOverview;
}
public void setmOverview(String mOverview) {
this.mOverview = mOverview;
}
public String getmReleaseDate() {
return mReleaseDate;
}
public void setmReleaseDate(String mReleasedate) {
this.mReleaseDate = mReleasedate;
}
public String getmPosterPath() {
return mPosterPath;
}
public void setmPosterPath(String mPosterPath) {
this.mPosterPath = mPosterPath;
}
public String getmVoteAverage() {
return mVoteAverage;
}
public void setmVoteAverage(String mVoteAverage) {
this.mVoteAverage = mVoteAverage;
}
public String getmId() {
return mId;
}
public void setmId(String mId) {
this.mId = mId;
}
//Database ID
public void setId(int id) {
this.id = id;
}
Дао (данные доступа к объекту). Вставка — это простой метод вставки для SQLite, но на этот раз с использованием Room. Я могу показать вам весь гитхаб, потому что мне надоел этот проект. :(
Люди не могут сказать вам, правильно ли вы вставляете данные, если вы не показываете, как выглядит класс данных и как он вставляется. На данный момент код, который вы разместили, предназначен только для графического интерфейса.
Я понимаю, что вы имеете ввиду. Я добавил интерфейс Dao внизу, помогает ли это, или я должен также добавить объект Movie?
вопрос скорее в том, что такое Models.Movies (которое, вероятно, следует называть Models.Movie)?
@pureskill75 MovieDao и Models.Movies являются соответствующей частью; остальное шум.
@MartinZeitler Я добавил Models.Movies ниже.




addToFavourites(args????)
Похоже, ваш метод addToFavourites принимает объект Movies, поэтому убедитесь, что этот объект снабжен аннотацией @Entity и имеет @PrimaryKey (уникальный для всех фильмов). Затем передайте его.
Я также заметил, что у вас есть два оператора вставки в вашем DAO, принимающие объект Movie. Я ДУМАЮ, что это правильно:
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(example.android.popularmoviesvolley.Models.Movies[] movies);
Так что убери другую
Затем в вашем классе RoomDatabase убедитесь, что у вас есть что-то вроде:
@Database(entities = {Movies.class}, version = 1, exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
...
}
Если это не отвечает на ваш вопрос, обновите свой пост и покажите свой класс фильмов.
Редактировать
Intent intent = getIntent();
String posterUrl = intent.getStringExtra(Constants.EXTRA_URL);
String title = intent.getStringExtra(Constants.TITLE_TEXT);
String overview = intent.getStringExtra(Constants.OVERVIEW_TEXT);
String releaseDate = intent.getStringExtra(Constants.RELEASE);
String voteAverage =
intent.getStringExtra(Constants.VOTE_AVERAGE);
final String movieId = intent.getStringExtra(MOVIE_ID);
Movies movies = new Movies(movieId, posterUrl, title, overview,
releaseDate, voteAverage);
mFavourites.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addToFavourites(movies)//I don't know what to do here
Toast.makeText(DetailActivity.this, "Added to Favourites",
Toast.LENGTH_SHORT).show();
}
});
Я включил все в пост, включая класс Models.Movies, я также удалил другой оператор вставки. Добавить в избранное определенно берет объект фильма, но я просто не знаю, как его передать.
Извините, ваш вопрос не имеет большого смысла. Недостаточно информации. Чтобы передать переменную методу, вы просто заключаете переменную в круглые скобки. Вы хотите спросить: «Как мне создать экземпляр объекта Movies для передачи в метод?»
Да именно так? (Извините, весь мой проект терпит неудачу, и у меня есть проблемы с IDE и проблемы с решением кода)
Отредактировал мой ответ, чтобы показать экземпляр вашего класса и передать его методу addToFavourites.
что такое
movieDao()? Что это за методinsert?