我有一个这样的TestData类:
data class TestData(
@TypeConverters(TestDataConverter::class)
var peripheral: BluetoothPeripheral,
var isEnabled: Boolean
)
据我了解,要保存非原始对象,我必须使用Coverter。我是这样创建的:
class TestDataConverter {
companion object {
var gson = Gson()
@TypeConverter
@JvmStatic
fun fromJson(json: String): BluetoothPeripheral {
val type = object : TypeToken<BluetoothPeripheral>() {}.type
return gson.fromJson(json, type)
}
@TypeConverter
@JvmStatic
fun toJson(peripheral: BluetoothPeripheral): String {
val type = object: TypeToken<BluetoothPeripheral>() {}.type
return gson.toJson(torrent, type)
}
}
}
我遇到错误:
E/AndroidRuntime: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:127)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:245)
at com.google.gson.Gson.toJson(Gson.java:704)
at com.google.gson.Gson.toJson(Gson.java:683)
at com.google.gson.Gson.toJson(Gson.java:638)
at c.room.TestDataConverter$Companion.toJson(TestDataConverter.kt:23)
at c.room.TestDataConverter.toJson(Unknown Source:2)
如何成功存储此类复杂对象?有可能吗?
答案 0 :(得分:0)
可能应该使用带有伴侣的类的静态类对象。当我第一次尝试Room。我有同样的问题。另外,您可以将@TypeConverters添加到您的实体,而不是字段。
@TypeConverter
object BluetoothPeripheral TypeConverter {
@JvmStatic
fun toJson(): String? { ... }
@JvmStatic
fun fromJson(): BluetoothPeripheral { ... }
}
答案 1 :(得分:0)
我认为使用转换器的重点是用原始类型表示我们的数据,因为SQLite仅支持几种类型。在这里,您尝试将对象转换为String / TEXT。转换器逻辑是正确的,但是类 BluetoothPeripheral 可能包含(我不确定,因为您未提供定义)嵌套对象,因此转换器不知道如何将它们转换为字符串