В моем приложении я хочу использовать База данных комнат для отображения автономных данных.
Я написал код ниже, но при нажатии на кнопку для добавления данных, если эти данные существуют в Базе данных комнат , это показывает ForceClose ошибка!
Как я могу проверитьдля этих данных в базе данных, перед добавлением в базу данных?
Мой класс NewsOfflineDatum:
@Entity(tableName = "newsList")
public class NewsOfflineDatum {
@PrimaryKey
private int id;
@ColumnInfo(name = "newsTitle")
private String title;
@ColumnInfo(name = "newsImage")
private String image;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
Мой класс адаптера:
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
private List<Today> model;
private Context context;
public NewsAdapter(List<Today> model) {
this.model = model;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_news, parent, false);
context = parent.getContext();
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final Today todayModel = model.get(position);
Glide.with(context)
.load(AppConstant.IMAGE_URL + todayModel.getImage())
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.rowNews_img);
holder.rowNews_txt.setText(todayModel.getTitle());
holder.rowNews_dl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NewsOfflineDatum offlineDatum = new NewsOfflineDatum();
offlineDatum.setId(todayModel.getId());
offlineDatum.setTitle(todayModel.getTitle());
offlineDatum.setImage(todayModel.getImage());
MainActivity.myAppDatabase.getMyDao().addNews(offlineDatum);
Toast.makeText(context, "Saved :)", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return model.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
@BindView(R.id.rowNews_img)
ImageView rowNews_img;
@BindView(R.id.rowNews_txt)
TextView rowNews_txt;
@BindView(R.id.rowNews_dl)
ImageView rowNews_dl;
public MyViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
Ошибка LogCat:
Process: com.example.mac8.mvplearnclicksite, PID: 7697
android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: newsList.id (code 1555)
#################################################################
Error Code : 1555 (SQLITE_CONSTRAINT_PRIMARYKEY)
Caused By : Abort due to constraint violation.
(UNIQUE constraint failed: newsList.id (code 1555))
#################################################################
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:865)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.arch.persistence.db.framework.FrameworkSQLiteStatement.executeInsert(FrameworkSQLiteStatement.java:50)
at android.arch.persistence.room.EntityInsertionAdapter.insert(EntityInsertionAdapter.java:64)
at com.example.mac8.mvplearnclicksite.Data.DataBase.MyDao_Impl.addNews(MyDao_Impl.java:49)
at com.example.mac8.mvplearnclicksite.Home.NewsAdapter$1.onClick(NewsAdapter.java:59)
at android.view.View.performClick(View.java:6261)
at android.view.View$PerformClick.run(View.java:23752)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Показывает ошибку для этой строки : MainActivity.myAppDatabase.getMyDao().addNews(offlineDatum);
Как я могуисправить это?