美文网首页
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