Room数据库--TypeConverter

2021/9/12 19:05:28

本文主要是介绍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
    }
    



这篇关于Room数据库--TypeConverter的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程