GreenDao 存储List<Bean>的数据

一 需求:

项目中用到了GreenDao,需要在其里表里加个属性面保存一个list<Bean>。

二 思路:

都是通过实现GreenDao的PropertyConverter实现的。首先考虑下如果是String类型的数据,遍历List然后将所有的String对象都append到一个容器中,然后保存在数据库中即可。若是bean类型的则通过gson将其转为json保存到数据库中。

三 泛型为Bean的实现

1 Converter类

// 1首先实现PropertyCOnverter接口,将bean转为json保存

public class InfoConverter implements PropertyConverter<List<InfoBean>, String> {
    @Override
    public List<InfoBean> convertToEntityProperty(String databaseValue) {
        if (databaseValue == null) {
            return null;
        }
        String[] list_str = databaseValue.split("~");
        List<InfoBean> list_transport = new ArrayList<>();
        for (String s : list_str) {
            list_transport.add(new Gson().fromJson(s, InfoBean.class));
        }
        return list_transport;
    }

    @Override
    public String convertToDatabaseValue(List<InfoBean> arrays) {
        if (arrays == null) {
            return null;
        } else {
            StringBuilder sb = new StringBuilder();
            for (InfoBean array : arrays) {
                String str = new Gson().toJson(array,InfoBean.class);
                sb.append(str);
                sb.append("~");
            }
            return sb.toString();
        }
    }
}

2 实体类

@Entity
public class Demo {
    @Id(autoincrement = true)
    private Long id;

    private String dateTime;

    @Convert(columnType = String.class,converter = InfoConverter.class)
    private List<InfoBean> list;

    @Generated(hash = 1944588636)
    public Demo(Long id, String dateTime, List<InfoBean> list) {
        this.id = id;
        this.dateTime = dateTime;
        this.list = list;
    }

    @Generated(hash = 571290164)
    public Demo() {
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDateTime() {
        return this.dateTime;
    }

    public void setDateTime(String dateTime) {
        this.dateTime = dateTime;
    }

    public List<InfoBean> getList() {
        return this.list;
    }

    public void setList(List<InfoBean> list) {
        this.list = list;
    }


    @Override
    public String toString() {
        return "Demo{" +
                "id=" + id +
                ", dateTime='" + dateTime + '\'' +
                ", list=" + list +
                '}';
    }
}
public class InfoBean {
    private String x;
    private String y;

    public InfoBean(String x, String y) {
        this.x = x;
        this.y = y;
    }

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }

    public String getY() {
        return y;
    }

    public void setY(String y) {
        this.y = y;
    }

    @Override
    public String toString() {
        return "InfoBean{" +
                "x='" + x + '\'' +
                ", y='" + y + '\'' +
                '}';
    }
}

四 测试

public class MainActivity extends AppCompatActivity {

    private DaoSession daoSession;
    private DaoMaster daoMaster;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "test.db", null);
        daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
        daoSession = daoMaster.newSession();
        
        findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DemoDao demoDao = daoSession.getDemoDao();
                demoDao.insert(getDemo());
            }
        });

        findViewById(R.id.btn_query).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                List<Demo> demoList = daoSession.getDemoDao().loadAll();
                for (int i = 0; i < demoList.size(); i++) {
                    Log.e("----------", demoList.get(i).toString());
                }
            }
        });

        findViewById(R.id.btn_delete).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                daoSession.getDemoDao().deleteAll();
            }
        });
    }


    private Demo getDemo() {
        Demo demo = new Demo();
        demo.setDateTime("2020.10.");
        demo.setList(getInfoList());
        return demo;
    }

    private List<InfoBean> getInfoList() {
        List<InfoBean> infoBeanList = new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            InfoBean infoBean = new InfoBean("test" + i, "测试" + i);
            infoBeanList.add(infoBean);
        }
        return infoBeanList;
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值