第一步引入依赖并配置defaultConfig
**implementation “androidx.room:room-runtime:2.2.5”
annotationProcessor “androidx.room:room-compiler:2.2.5”
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation":
"$projectDir/schemas".toString()]
}
}**
第二步创建实体属性类Emperor
****public class Emperor {
//PrimaryKey主键,autoGenerate自增长
@PrimaryKey(autoGenerate = true)
//ColumnInfo用于指定该字段存储在表中的名字,并指定类型
@ColumnInfo(name = "id", typeAffinity = ColumnInfo.INTEGER)
public int id;
@ColumnInfo(name = "emperor_name", typeAffinity = ColumnInfo.TEXT)
public String name;
@ColumnInfo(name = "image", typeAffinity = ColumnInfo.TEXT)
public String image;
@ColumnInfo(name = "age", typeAffinity = ColumnInfo.TEXT)
public String age;
//Room默认使用这个构造方法操作数据
public Emperor(int id, String name, String age,String image) {
this.id = id;
this.name = name;
this.age = age;
this.image=image;
}
}****
第三步创建DAO类
//插入数据
@Insert
public void insertEmperor(Emperor… emperor);
//删除数据
@Delete
public void deleteEmperor(Emperor... emperor);
//修改数据
@Update
public void updateEmperor(Emperor... emperor);
//根据条件查询唯一的一个
@Query("SELECt * FROM emperor_table WHERE id=:id")
public Emperor queryEmperorById(int id);
//根据条件查询多个数据
@Query("SELECt * FROM emperor_table WHERE age=:age")
public List<Emperor> queryEmperorsByAge(String age);
//不设置条件,查询所有数据
@Query("SELECt * FROM emperor_table")
public List<Emperor> queryEmperors();
第四步创建DataBase
@Database(entities = {Emperor.class}, version = 3)
public abstract class MyDatabase extends RoomDatabase {
private static final String DATABASE_NAME = "emperor_db";
private static MyDatabase databaseInstance;
//结合单例模式完成创建数据库实例
public static synchronized MyDatabase getDatabaseInstance(Context context) {
if (databaseInstance == null) {
databaseInstance = Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, DATABASE_NAME).allowMainThreadQueries().build();
}
return databaseInstance;
}
//将第四步创建的Dao对象以抽象方法的形式返回
public abstract EmperorDao getEmperorDao();
}
第五步使用
dao = MyDatabase.getDatabaseInstance(getContext()).getEmperorDao();
for(int i=1;i<=dao.queryEmperors().size();i++) {
Emperor sunQuan = dao.queryEmperorById(i);
String name = sunQuan.name;
String age = sunQuan.age;
int image = Integer.valueOf(sunQuan.image);
MessageEvent messageEvent = new MessageEvent(name, image, age);
messageEventList.add(messageEvent);
}
注意点由Eventbus传递过来的封装实体会有两个连续的item
处理bug
在接收事件中遍历数据库若无则插入,具体代码为
boolean ischeck=true;
for(int i=1;i<dao.queryEmperors().size();i++){
if (title.equals(dao.queryEmperorById(i).name)){
ischeck=false;
}
}
if(ischeck==true){
MessageEvent messageEvent=new MessageEvent(title,image,content);
messageEventList.add(messageEvent);
dao.insertEmperor(caoCao);
}
//保留连续项中的一个
for(int i=0;i<messageEventList.size()-1;i++){
if(messageEventList.get(i).getTitle().equals(messageEventList.get(i+1).getTitle())){
messageEventList.remove(i);
}
}
在onActivity中将数据库已有的数据传递给实体类
**dao = MyDatabase.getDatabaseInstance(getContext()).getEmperorDao();
for(int i=1;i<=dao.queryEmperors().size();i++) {
Emperor sunQuan = dao.queryEmperorById(i);
String name = sunQuan.name;
String age = sunQuan.age;
int image = Integer.valueOf(sunQuan.image);
MessageEvent messageEvent = new MessageEvent(name, image, age);
messageEventList.add(messageEvent);
}
for(int i=0;i<messageEventList.size()-1;i++){
if(messageEventList.get(i).getTitle().equals(messageEventList.get(i+1).getTitle())){
messageEventList.remove(i);
}
}**
https://blog.csdn.net/danceinkeyboard/article/details/111938810?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control