xUtils系列之DbUtils-保存自定义类型

在DbUtils中,只支持4中数据类型:
public enum ColumnDbType {

    INTEGER("INTEGER"), REAL("REAL"), TEXT("TEXT"), BLOB("BLOB");

    private String value;

    ColumnDbType(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return value;
    }
}

而在Java中,我们有8种基本类型,但是我们在使用DbUtils时,都能正确的对这些数据类型进行存取,
这是怎么做到的呢?

通过查看源码发现,com.lidroid.xutils.db.converter包中,定义了一系列的转换器,


这些转换器都实现了ColumnConverter接口,然后在ColumnConverterFactory中对这些装换器进行注册,
这样,DbUtils就知道怎么自动存取这些数据类型了.
所以,如果想DbUtils能保存我们自定义的数据类型,仿照已经实现的转换器即可.


下面是xUtils官方的例子:
当程序退出是,需要保存正在下载文件的数据,其中有一个下载状态,是自定义的枚举类型,

public enum State {
    WAITING(0), STARTED(1), LOADING(2), FAILURE(3), CANCELLED(4), SUCCESS(5);
    private int value = 0;

    State(int value) {
        this.value = value;
    }

    public static State valueOf(int value) {
        switch (value) {
            case 0:
                return WAITING;
            case 1:
                return STARTED;
            case 2:
                return LOADING;
            case 3:
                return FAILURE;
            case 4:
                return CANCELLED;
            case 5:
                return SUCCESS;
            default:
                return FAILURE;
        }
    }

    public int value() {
        return this.value;
    }
}

为了保存这个数据类型,作者在保存数据之前,实现了一个ColumnConverter:

private class HttpHandlerStateConverter implements ColumnConverter<HttpHandler.State> {

    @Override
    public HttpHandler.State getFieldValue(Cursor cursor, int index) {
        return HttpHandler.State.valueOf(cursor.getInt(index));
    }

    @Override
    public HttpHandler.State getFieldValue(String fieldStringValue) {
        if (fieldStringValue == null) return null;
        return HttpHandler.State.valueOf(fieldStringValue);
    }

    @Override
    public Object fieldValue2ColumnValue(HttpHandler.State fieldValue) {
        return fieldValue.value();
    }

    @Override
    public ColumnDbType getColumnDbType() {
        return ColumnDbType.INTEGER;
    }
}

在程序开始的时候,通过ColumnConverterFactory对HttpHandlerStateConverter进行注册:
ColumnConverterFactory.registerColumnConverter(HttpHandler.State.class, new HttpHandlerStateConverter());

这样,DbUtils就能自动帮助我们存取自定义类型数据了.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值