美文网首页
Room存储之复杂数据存储(List)

Room存储之复杂数据存储(List)

作者: EasonZzz | 来源:发表于2020-03-30 11:58 被阅读0次

阅读建议:此篇文章基于room的简单使用,如果你还没使用过room存储,可以先阅读官方文档

假设存在如下一个Bean

class RoomTest {

    var id: String=""
    var list: List<TestBean>? = null

    inner class TestBean(
        var id: String,
        var name: String
    )
}

使用Room存储改造的Bean

@Entity(tableName = "room_test")
class RoomTest {
      @PrimaryKey
      var id: String=""
      var list: List<TestBean>? = null

      inner class TestBean(
          var id: String,
        var name: String
    )
}

上面的代码直接使用room存储在编译期间就会直接报错:
Cannot figure out how to save this field into database. You can consider adding a type converter for it.
提示需要添加一个类型转换器。
创建如下类型转换器:

class RoomTestConverters {
@TypeConverter
fun stringToObject(value: String): List<RoomTest.TestBean> {
    val listType = object : TypeToken<List<RoomTest.TestBean>>() {}.type
    return Gson().fromJson(value, listType)
}

@TypeConverter
fun objectToString(list: List<RoomTest.TestBean>): String {
    return Gson().toJson(list)
}
}

在bean添加转换器注解,指定对应的转换器,如下:

@Entity(tableName = "room_test")
@TypeConverters(RoomTestConverters::class)
class RoomTest {

@PrimaryKey
var id: String=""
var list: List<TestBean>? = null

class TestBean(
    var id: String,
    var name: String
)

}

就可以正常进行数据存储操作了。Room对于List存储,给出的方案实际上就是讲list听过类型转换在存的时候通过GSON转换为String类型进行存储,在取的时候再转换为对应的bean。

相关文章

网友评论

      本文标题:Room存储之复杂数据存储(List)

      本文链接:https://www.haomeiwen.com/subject/zvlvtctx.html