如何使用 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()