Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间-保存房间中的复杂对象_Android_Kotlin_Android Room - Fatal编程技术网

Android 房间-保存房间中的复杂对象

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

我有这样一个TestData类:

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能给我看一下示例代码吗?