android Room数据库使用之多List<Object>并存。

先看看数据库的参数结构,里面有多个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<TrueEatData> eatData;

@TypeConverters(ChatItemConverter.class)
public List<ShitData> shitData;

@TypeConverters(ChatItemConverter3.class)
public List<YiMiaoData> yiMiaoData;

@TypeConverters(ChatItemConverter4.class)
public List<KgData> kgData;

@TypeConverters(ChatItemConverter5.class)
public List<QuChongData> 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<Mycan> zaoc;
	
		    public List<Mycan> wuc;
	
		    public List<Mycan> wanc;
	
		    public List<Integer> 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<TrueEatData> eatData;

@TypeConverters(ChatItemConverter.class)
 public List<ShitData> shitData;

@TypeConverters(ChatItemConverter3.class)
public List<YiMiaoData> yiMiaoData;

@TypeConverters(ChatItemConverter4.class)
public List<KgData> kgData;

@TypeConverters(ChatItemConverter5.class)
public List<QuChongData> quChongData;

ChatItemConverter1 --以上的3,4都是将TrueEatData替换为对应的bean即可

	public class ChatItemConverter1 {
@TypeConverter
public String objectToString(List<TrueEatData> list) { //TrueEatData  
    return GsonInstance.getInstance().getGson().toJson(list);
}

@TypeConverter
public List<TrueEatData> stringToObject(String json) {
    Type listType = new TypeToken<List<TrueEatData>>() {
    }.getType();
    return GsonInstance.getInstance().getGson().fromJson(json, listType);
}

	public class ChatItemConverter {
@TypeConverter
public String objectToString(List<ShitData> list) {
    return GsonInstance.getInstance().getGson().toJson(list);
}

@TypeConverter
public List<ShitData> stringToObject(String json) {
    Type listType = new TypeToken<List<ShitData>>() {
    }.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<NoteData> list);

@Delete
void delete(NoteData... beans);

@Delete
void delete(List<NoteData> list);

@Query("SELECT * FROM NoteData ORDER BY date DESC")
List<NoteData> 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<NoteData> queryByTag(int tagId);

@Query("SELECT * FROM NoteData where id = :id")
NoteData getInfo(int id);

@Update
int update(NoteData... beans);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值