• 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

    }

  • 相关阅读:
    vue配置
    英语单词记忆(词缀 / 前缀)
    如何封禁大量恶意IP?
    LeetCode 面试题 08.13. 堆箱子
    MATLAB提取不规则txt文件中的数值数据(简单且实用)
    (附源码)springboot苔藓植物科普网站 毕业设计 345641
    计算机视觉结合深度学习项目-智能停车场空车位实时识别
    OmniPlan Pro for Mac v4.8.0中文激活版 项目流程管理工具
    HttpClient远程调用基本使用(详解)
    Flask 表单以及表单验证
  • 原文地址:https://blog.csdn.net/weixin_41422638/article/details/127431774