Room数据库--TypeConverter

TypeConverter是什么

TypeConverterRoom数据库的类型转换器,可以对收到的数据进行类型转换

例如:

1、服务器返回Long类型的时间戳,我们可以通过TypeConverter将时间戳转换为Date类型
2、如果服务器返回了对象数组,默认Room是无法处理数组的,此时我们可以通过TypeConverter将Json中的数组转换为对象

使用TypeConverter存储数组和日期

首先定义一个Student类和Book类

一个学生是可以有多本书的,所以我们的Student构造中有一个books:List<Book>的列表


@Entity
data class Book(var name: String) {
    @PrimaryKey(autoGenerate = true)
    var id: Long? = null
}

@TypeConverters(BookConvert::class, DateConverter::class)//这里如果没有声明注解,是无法编译通过的,报错信息如下图,只有定义了
@Entity
data class Student(var name: String, var books: List<Book>, var date: Date) {
    @PrimaryKey(autoGenerate = true)
    var id: Long? = null
}

使用BookConvert存储,Book数组


class BookConvert {
    private val gson = Gson()

    @TypeConverter
    fun objectToString(list: List<Book>): String {
        return gson.toJson(list)
    }

    @TypeConverter
    fun stringToObject(json: String?): List<Book> {
        val listType: Type = object : TypeToken<List<Book>>() {}.type
        return gson.fromJson(json, listType)
    }
}

使用DateConverter进行日期和时间戳转化

class DateConverter {
    @TypeConverter
    fun revertDate(value: Long): Date {
        return Date(value);
    }

    @TypeConverter
    fun converterDate(value: Date): Long {
        return value.time;
    }
}

数据存储结果

其它

如何把TypeConverter添加给多个对象

将注解添加到Datebase对象上

@Database(entities = arrayOf(User::class), version = 1)
    @TypeConverters(Converters::class)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值