我正在编辑我的项目的现有实体,如下所示(我添加了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
)
我的类型转换器类:
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简化了集成。我的问题是,我需要这个字段默认为null,因为如果它是,我从另一个源获取数据。问题是,如果我这样做,我的单元测试会被破坏,如果我这样做,例如:
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()
所以我的问题是:是否有一种方法允许保存此实体而不初始化此字段以默认保持其为空?或者唯一的方法是添加一个布尔值以跟踪此字段是否已编辑?
谢谢
1条答案
按热度按时间zbsbpyhn1#
问题您的问题似乎是TypeConverter在转换SessionsSettings时不接受空值。
修正
变更为使用
someObject: SessionSettings?
,即添加了?
工作示例/演示
下面使用基于您的代码的代码演示了细微的变化,即:-
并使用上述:-
运行后的日志:-
通过应用程序检查,数据库:-