• 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 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 +
                '}';
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    其中还多重包含参数如 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;
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    EatData 的结构还嵌套着List

    			@Entity
    		public class EatData implements Serializable {
    		
    		    public List zaoc;
    	
    		    public List wuc;
    	
    		    public List wanc;
    	
    		    public List water;
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样复杂的结构,归功于实体化@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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    	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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    }

    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;
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    补个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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    }

  • 相关阅读:
    【华为OD机试真题 JS】判断一组不等式是否满足约束并输出最大差
    DM_SQL
    <Visual Studio 2019安装及环境配置教程>
    React+TS学习和使用
    pytorch -- torch.nn.Module
    vue修改node_modules打补丁步骤和注意事项
    Mysql多表练习题30道
    476.数字的补数
    解决VUE的全局命名找不见的问题
    芯科科技推出新的8位MCU系列产品,扩展其强大的MCU平台
  • 原文地址:https://blog.csdn.net/weixin_41422638/article/details/127431774