Android 房间-保存房间中的复杂对象
我有这样一个TestData类:Android 房间-保存房间中的复杂对象,android,kotlin,android-room,Android,Kotlin,Android Room,我有这样一个TestData类: data class TestData( @TypeConverters(TestDataConverter::class) var peripheral: BluetoothPeripheral, var isEnabled: Boolean ) class TestDataConverter { companion object { var gson = Gson() @TypeConver
data class TestData(
@TypeConverters(TestDataConverter::class)
var peripheral: BluetoothPeripheral,
var isEnabled: Boolean
)
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)
}
}
}
据我所知,要保存非原始对象,我必须使用Coverter。我是这样创造的:
data class TestData(
@TypeConverters(TestDataConverter::class)
var peripheral: BluetoothPeripheral,
var isEnabled: Boolean
)
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)
}
}
}
如何成功存储这种类型的复杂对象?有可能吗?您可能应该使用一个类的静态类对象和companion。我第一次试房间的时候。我也有同样的问题。您可以将@TypeConverters添加到实体而不是字段
@TypeConverter
object BluetoothPeripheral TypeConverter {
@JvmStatic
fun toJson(): String? { ... }
@JvmStatic
fun fromJson(): BluetoothPeripheral { ... }
}
可能您应该使用一个带有companion的类的静态类对象。我第一次试房间的时候。我也有同样的问题。您可以将@TypeConverters添加到实体而不是字段
@TypeConverter
object BluetoothPeripheral TypeConverter {
@JvmStatic
fun toJson(): String? { ... }
@JvmStatic
fun fromJson(): BluetoothPeripheral { ... }
}
我认为使用转换器的关键是用基本类型表示数据,因为SQLite只支持少数类型。这里您尝试将对象转换为字符串/文本。转换器逻辑是正确的,但是BluetoothPeripheral类可能包含嵌套对象(我不确定,因为您没有提供定义),因此转换器不知道如何将它们转换为字符串。我认为使用转换器的全部目的是用基元类型表示数据,因为SQLite只支持少数类型。这里您尝试将对象转换为字符串/文本。转换器逻辑正确,但BluetoothPeripheral类可能包含嵌套对象(我不确定,因为您没有提供定义),因此转换器不知道如何将它们转换为字符串。我所做的是以字符串格式保存响应,并在需要时转换为Json。@KaushikBurkule您能给我看一下示例代码吗,请?我所做的是以字符串格式保存响应,并在需要时转换为Json。@KaushikBurkule能给我看一下示例代码吗?