android - 当 Date 项目为空时,Moshi 无法转换 Json
问题描述
我在我的应用程序中使用 Moshi,对于我Date
将从服务器获取的我,我刚刚为 Moshi 定义了一个自定义适配器,但是会发生的事情是当我的日期为空时,Moshi
无法将其转换JSON
为我的模型,所以它给了我一个如下错误:
这是我的数据类:
@JsonClass(generateAdapter = true)
data class BoughtSmart(
var id: Int?,
var title: String?,
@Json(name = "start_date") var startDate: Date?,
@Json(name = "expire_date") var expireDate: Date?,
@Json(name = "created_time") var createdTime: Date?,
@Json(name = "modified_time") var modifiedTime: Date?
)
我的 Moshi 客户适配器:
class CustomDateAdapter : JsonAdapter<Date>() {
private val dateFormat = SimpleDateFormat(SERVER_FORMAT, Locale.ENGLISH)
private val TAG = CustomDateAdapter::class.java.simpleName
@FromJson
override fun fromJson(reader: JsonReader?): Date? {
var dateAsString = ""
reader?.apply {
try {
dateAsString = nextString()
} catch (e: Exception) {
Log.e(TAG, "Error [${e}]")
}
}
return dateFormat.parse(dateAsString)
}
@ToJson
override fun toJson(writer: JsonWriter, value: Date?) {
if (value != null) {
writer.value(value.toString())
}
}
companion object {
const val SERVER_FORMAT = ("yyyy-MM-dd'T'HH:mm:ss")
}
}
错误形式 Moshi:
com.squareup.moshi.JsonDataException: Expected a string but was NULL at path $.results[0].expire_date
解决方案
尝试这个:
reader?.apply {
try {
if (peek() == JsonToken.STRING) {
dateAsString = nextString()
} else {
nextNull()
}
} catch (e: Exception) {
Log.e(TAG, "Error [${e}]")
}
}
推荐阅读
- excel - 如何确保excel列中的数字列表从最后一个非零数字继续
- cytoscape - 如何分析 CytoMCS 中的六种非共价相互作用相互作用网络?
- python - 池化一维张量
- c# - Oracle GRANT:防止 SQL 注入
- powershell - Dhall Repl:奇怪的格式问题(Windows 10 64bit 上的 Powershell)
- google-chrome - 最新更新 chrome(93) 后如何禁用相同的站点 cookie 标志?
- javascript - 如何在 onload() 函数中编写 html 代码?
- java - 找不到参数的方法 dependencyResolutionManagement()
- javascript - MongoStore.create({ ........无法读取未定义的属性“创建”
- flutter - 如何在 Flutter 的 dropdownButton 中添加按钮