如何使用 Retrofit 和 Gson 将字符串解析为 Android.Uri
How to parse a String to Android.Uri with Retrofit and Gson
我正在制作一个 Android 应用程序,我正在使用 Gson 进行改造。我请求的一种类型称为来自 api 的照片,其中有两个 Url,都是图片的链接。
data class Photo(val id: Int, val title: String, val pictureUrl: Uri, val thumbnailUrl: Uri)
我希望改装能够将 Json 直接解析为 class,并且我正在考虑编写一个额外的 Gson 适配器。但是我没能在 Kotlin 中找到一个易于理解的例子。
还考虑过使用额外的转换器工厂???但这似乎不对。
解决这个问题的方法是什么?
您可以使用此代码示例:
class UriDeserializer : JsonDeserializer<Uri> {
override fun deserialize(
json: JsonElement?,
typeOfT: Type?,
context: JsonDeserializationContext?
): Uri {
return Uri.parse(json?.asString)
}
}
并在创建 Gson 实例时注册此反序列化器:
GsonBuilder().registerTypeAdapter(Uri::class.java, UriDeserializer())
.create()
我正在制作一个 Android 应用程序,我正在使用 Gson 进行改造。我请求的一种类型称为来自 api 的照片,其中有两个 Url,都是图片的链接。
data class Photo(val id: Int, val title: String, val pictureUrl: Uri, val thumbnailUrl: Uri)
我希望改装能够将 Json 直接解析为 class,并且我正在考虑编写一个额外的 Gson 适配器。但是我没能在 Kotlin 中找到一个易于理解的例子。 还考虑过使用额外的转换器工厂???但这似乎不对。
解决这个问题的方法是什么?
您可以使用此代码示例:
class UriDeserializer : JsonDeserializer<Uri> {
override fun deserialize(
json: JsonElement?,
typeOfT: Type?,
context: JsonDeserializationContext?
): Uri {
return Uri.parse(json?.asString)
}
}
并在创建 Gson 实例时注册此反序列化器:
GsonBuilder().registerTypeAdapter(Uri::class.java, UriDeserializer())
.create()