GreenDao存集合类型数据

来源:互联网 发布:mac flash发热 编辑:程序博客网 时间:2024/05/22 05:11

此文章是基于已经成功导入GreenDao了,但是GreenDao存集合类型的数据需要多几步的操作,至于怎么导入,这个自己上网查了,这篇就不赘述了(或者以后可能会补上,等我忘了怎么用把。。。)


第一步,导入Gson第三方。


第二步,新建类InterConverter , StringConverter 类,代码如下

public class InterConverter implements PropertyConverter<List<Integer>, String> {    private final Gson mGson;    public InterConverter() {        mGson = new Gson();    }    @Override    public List<Integer> convertToEntityProperty(String databaseValue) {        Type type = new TypeToken<ArrayList<Integer>>() {        }.getType();        ArrayList<Integer> list = mGson.fromJson(databaseValue , type);        return list;    }    @Override    public String convertToDatabaseValue(List<Integer> entityProperty) {        String dbString = mGson.toJson(entityProperty);        return dbString;    }}


public class StringConverter implements PropertyConverter<List<String> , String>{    @Override    public List<String> convertToEntityProperty(String databaseValue) {        if (databaseValue == null) {            return null;        }        else {            List<String> list = Arrays.asList(databaseValue.split(","));            return list;        }    }    @Override    public String convertToDatabaseValue(List<String> entityProperty) {        if(entityProperty==null){            return null;        }        else{            StringBuilder sb= new StringBuilder();            for(String link:entityProperty){                sb.append(link);                sb.append(",");            }            return sb.toString();        }    }}

第三步,在最开始的编译生成的DaoMaster DaoSession 的那个类,下面添加新的元素进去 然后再重新Sync Project

with Gradle Files     

@Convert 是添加集合需要的

核心代码如下:

@Convert(columnType = String.class, converter = StringConverter.class)    private List<String> nickname;    @Convert(columnType = String.class, converter = InterConverter.class)    private List<Integer> hahaha;

我编译之后的OBDL类最终代码如下:
@Entitypublic class OBDL {    @Id    private Long id;    @Property    @NotNull    private String name;    @Convert(columnType = String.class, converter = StringConverter.class)    private List<String> nickname;    @Convert(columnType = String.class, converter = InterConverter.class)    private List<Integer> hahaha;    @Generated(hash = 1316419519)    public OBDL(Long id, @NotNull String name, List<String> nickname,            List<Integer> hahaha) {        this.id = id;        this.name = name;        this.nickname = nickname;        this.hahaha = hahaha;    }    @Generated(hash = 1700707547)    public OBDL() {    }    public Long getId() {        return this.id;    }    public void setId(Long id) {        this.id = id;    }    public String getName() {        return this.name;    }    public void setName(String name) {        this.name = name;    }    public List<String> getNickname() {        return this.nickname;    }    public void setNickname(List<String> nickname) {        this.nickname = nickname;    }    public List<Integer> getHahaha() {        return this.hahaha;    }    public void setHahaha(List<Integer> hahaha) {        this.hahaha = hahaha;    }}

之后单例的类没有其他变化


具体调用如下:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        DBTool.getOutInstance().deleteAll();        List<Integer> data = new ArrayList<>();        for (int i = 0; i < 10; i++) {            data.add(i);        }        OBDL obdl = new OBDL();        obdl.setName("qwe");        obdl.setHahaha(data);        DBTool.getOutInstance().insertBean(obdl);        for (Integer qwe : DBTool.getOutInstance().getQueryKey("qwe").getHahaha()) {            LogUtil.chunyLog().d(qwe);        }//        List<String> data = new ArrayList<>();//        for (int i = 0; i < 10; i++) {//            data.add(i + "asd");//        }////        OBDL obdl = new OBDL();//        obdl.setName("qwe");//        obdl.setNickname(data);//        DBTool.getOutInstance().insertBean(obdl);//////        for (String qwe : DBTool.getOutInstance().getQueryKey("qwe").getNickname()) {//            LogUtil.chunyLog().d(qwe);//        }    }}

存int 集合和 String 集合都写了(String集合就是注释掉的那一块)

OK  收工

---------------------------------------------------------------------------------------------------------------------------------------------


最后共享一些最近的感悟: 之前一直不觉得 “生活就像巧克力盒....”那句话有什么好的。突然有一天,平淡的生活

起了对我自己的波澜,就好像我一直就在和我自己下一盘棋,突然之间棋盘不见,棋子再也不能放到棋盘上面。。。

有的不是难过,不是生气,只是莫名的无奈。对,无奈,说不出具体为什么无奈,之前自己所做仿佛就是在嘲笑现在的自己。

  --------------------------这些是写给我自己的,不是要看到的人明白什么意思的,我只是希望,多年以后我不会把现在的感受给忘了吧。