【问题标题】:Cannot figure out how to save this field into database for Android room无法弄清楚如何将此字段保存到 Android 房间的数据库中
【发布时间】:2019-09-07 07:17:45
【问题描述】:

我正在使用Android Room 开发数据库,​​我想将JSON 的数据存储到数据库中,如下所示。

@Entity(tableName = "bank_info")
data class BankInfo(

    @PrimaryKey
    @SerializedName("id")
    @ColumnInfo(name = "id") val id: Long,

    @SerializedName("name")
    @ColumnInfo(name = "name") val name: String,

    @TypeConverters(BankTypeConverter::class)
    @SerializedName("banks")
    @ColumnInfo(name = "banks") val banks: List<Bank>,

){
    data class Bank (
        @SerializedName("bankid")
        @ColumnInfo(name = "id") val id: Long,

        @SerializedName("name")
        @ColumnInfo(name = "name") val name: String

    )
}

并显示错误:

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
    private final java.util.List<com.bank.wallet.BankInfo.Bank> banks = null;
                                                                                                      ^

我已搜索上述错误,并使用@TypeCovert,如下所示:

class BankTypeConverter {

    @TypeConverter
    open fun lisiToString(list: List<Bank>): String {
        if (list == null || list.size === 0) {
            return ""
        }
        val gson = Gson()
        val type = object : TypeToken<List<Bank>>() {

        }.type
        val json = gson.toJson(list, type)

        return json
    }

    @TypeConverter
    open fun StringToArray(value: String): List<Bank> {

        val gson = Gson()
        val type = object : TypeToken<List<Bank>>() {

        }.type
        return gson.fromJson(value, type)

    }

}

但它不起作用,我错过了什么吗?

上述格式的@TypeCovert怎么写?

提前致谢。

【问题讨论】:

    标签: android android-room typeconverter


    【解决方案1】:

    这是一个代码sn-p

    class Converter {
    
        @TypeConverter
        public static List<Bank> restoreBankList(String listOfString) {
            return new Gson().fromJson(listOfString, new TypeToken<List<Bank>>() {}.getType());
        }
    
        @TypeConverter
        public static String saveListAsString(List<Bank> listOfString) {
            return new Gson().toJson(listOfString);
        }
    
    }
    

    现在你应该告诉RoomDatabase你正在使用@TypeConverter

    @Database(entities = YourClass, version = 1)
    @TypeConverters({Converter.class})
    public abstract class RadarDatabaseHolder extends RoomDatabase {
    
    
    
    // here is your usual code
    
    }
    

    在进行数据库操作时会自动转换类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2019-10-04
      • 2017-11-18
      相关资源
      最近更新 更多