无法弄清楚如何将此字段保存到Android房间的数据库中



我正在开发带有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

提前谢谢。

这是一个代码片段

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
}

类型将在执行数据库操作时自动转换

最新更新