【发布时间】:2023-02-23 03:52:08
【问题描述】:
我正在编辑项目的现有实体,如下所示(我添加了 sessionSettings 字段):
data class Patient(
// ... other fields
@Expose
@SerializedName("exo_settings")
@Embedded
var exoSettingsData: ExoSettingsData? = null, // already exist
@Expose
@SerializedName("session_settings")
@TypeConverters(SessionSettingsConverters::class)
var sessionSettings: SessionSettings? = null, // the new field
/// ... other fields
)
我的 TypeConverter 类:
class SessionSettingsConverters {
private var gson = Gson()
@TypeConverter
fun stringToSessionSettings(data: String?): SessionSettings? {
if (data.isNullOrEmpty()) {
return null
}
val sessionSettingsType = object : TypeToken<SessionSettings>() {}.type
return gson.fromJson(data, sessionSettingsType)
}
@TypeConverter
fun sessionSettingsToString(someObject: SessionSettings): String? {
return gson.toJson(someObject)
}
}
我添加了会话设置;这是一个包含字符串和整数的基本对象,它是 TypeConverter 以简化集成。我的问题是,我需要这个字段默认为空,因为如果是,我正在从另一个来源获取数据。问题是,如果我这样做,我的单元测试就会被破坏,例如:
val patient1 = Patient("1", synkStatus = SynkStatus.DELETED)
centerDatabase.patientDao().savePatient(patient1).test()
它失败了(实体没有保存),但是如果我初始化一个 SessionSettings 对象,它就可以工作:
val patient1 = Patient("1", synkStatus = SynkStatus.DELETED, sessionSettings = SessionSettings())
centerDatabase.patientDao().savePatient(patient1).test()
所以我的问题是:有没有办法允许保存这个实体而不初始化这个字段以默认保持它为空?或者唯一的方法是添加一个布尔值来跟踪该字段是否已被编辑?
谢谢
【问题讨论】:
标签: kotlin android-room