先看看数据库的参数结构,里面有多个List结构体,
@Entity
public class NoteData implements Serializable {
@PrimaryKey(autoGenerate = true)
public int id;
public int tagId;
public long date;
public String name;
public String pinzhong;
public int sex;
public long birthday;
public String headUrl;
@TypeConverters(ChatItemConverter1.class)
public List eatData;
@TypeConverters(ChatItemConverter.class)
public List shitData;
@TypeConverters(ChatItemConverter3.class)
public List yiMiaoData;
@TypeConverters(ChatItemConverter4.class)
public List kgData;
@TypeConverters(ChatItemConverter5.class)
public List quChongData;
@Override
public String toString() {
return "NoteData{" +
"id=" + id +
", tagId=" + tagId +
", date=" + date +
", name='" + name + '\'' +
", pinzhong='" + pinzhong + '\'' +
", sex=" + sex +
", birthday=" + birthday +
", headUrl='" + headUrl + '\'' +
", eatData=" + eatData +
", shitData=" + shitData +
", yiMiaoData=" + yiMiaoData +
", kgData=" + kgData +
", quChongData=" + quChongData +
'}';
}
其中还多重包含参数如 List 《TrueEatData> 的结构
@Entity
public class TrueEatData implements Serializable {
@PrimaryKey(autoGenerate = true)
public int id;
public long data;
public EatData eatData2; // bean
public TrueEatData(Long da,EatData de){
this.data = da;
this.eatData2 = de;
}
}
EatData 的结构还嵌套着List
@Entity
public class EatData implements Serializable {
public List zaoc;
public List wuc;
public List wanc;
public List water;
}
Mycan的结构
@Entity
public class Mycan implements Serializable {
public String maoliangname;
public int g;
public String guantouname;
public int geshu;
public String qitaname;
public int zhong;
}
这样复杂的结构,归功于实体化@Entity,以及@TypeConverters(ChatItemConverter1.class) Gson解析
对应的List。
@TypeConverters(ChatItemConverter1.class)
public List eatData;
@TypeConverters(ChatItemConverter.class)
public List shitData;
@TypeConverters(ChatItemConverter3.class)
public List yiMiaoData;
@TypeConverters(ChatItemConverter4.class)
public List kgData;
@TypeConverters(ChatItemConverter5.class)
public List quChongData;
ChatItemConverter1 --以上的3,4都是将TrueEatData替换为对应的bean即可
public class ChatItemConverter1 {
@TypeConverter
public String objectToString(List list) { //TrueEatData
return GsonInstance.getInstance().getGson().toJson(list);
}
@TypeConverter
public List stringToObject(String json) {
Type listType = new TypeToken>() {
}.getType();
return GsonInstance.getInstance().getGson().fromJson(json, listType);
}
如
public class ChatItemConverter {
@TypeConverter
public String objectToString(List list) {
return GsonInstance.getInstance().getGson().toJson(list);
}
@TypeConverter
public List stringToObject(String json) {
Type listType = new TypeToken>() {
}.getType();
return GsonInstance.getInstance().getGson().fromJson(json, listType);
}
}
GsonInstance //Gson没有的话要去依赖一下
public class GsonInstance {
private static GsonInstance INSTANCE;
private static Gson gson;
public static GsonInstance getInstance() {
if (INSTANCE == null) {
synchronized (GsonInstance.class) {
if (INSTANCE == null) {
INSTANCE = new GsonInstance();
}
}
}
return INSTANCE;
}
//Gson
public Gson getGson() {
if (gson == null) {
synchronized (GsonInstance.class) {
if (gson == null) {
gson = new Gson();
}
}
}
return gson;
}
}
补个Dao
@Dao
public interface NoteDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(NoteData... beans);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(List list);
@Delete
void delete(NoteData... beans);
@Delete
void delete(List list);
@Query("SELECT * FROM NoteData ORDER BY date DESC")
List query();
@Query("SELECT * FROM NoteData WHERE id = :id")
NoteData query(int id);
@Query("SELECT COUNT(*) FROM NoteData WHERE tagId = :tagId")
long queryCountByTag(int tagId);
@Query("SELECT * FROM NoteData WHERE tagId = :tagId ORDER BY date DESC")
List queryByTag(int tagId);
@Query("SELECT * FROM NoteData where id = :id")
NoteData getInfo(int id);
@Update
int update(NoteData... beans);
}