如何使用Retrofit和Gson将字符串解析为Android.Uri

2cmtqfgy  于 2022-11-06  发布在  Android
关注(0)|答案(2)|浏览(202)

我正在做一个Android应用程序,我正在使用Gson的翻新。我请求的类型之一是所谓的照片从API有两个URL在它,都是图片的链接。

data class Photo(val id: Int, val title: String, val pictureUrl: Uri, val thumbnailUrl: Uri)

我更希望refortment能直接将Json解析为类,我在考虑写一个额外的Gson适配器。但是我还没有在Kotlin中找到一个可以理解的例子。也考虑过使用一个额外的converterfactory???但是这似乎不对。
在这个问题上该怎么办呢?

n8ghc7c1

n8ghc7c11#

您可以使用以下代码示例:

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()
brtdzjyr

brtdzjyr2#

你可以用这个TypeAdapter来把SerializeDeserialize这个Uri

object UriTypeAdapter : JsonDeserializer<Uri>, JsonSerializer<Uri> {

    override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): Uri {
        return Uri.parse(json?.asString.toString())
    }

    override fun serialize(src: Uri?, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement {
        return JsonPrimitive(src.toString())
    }
}

像这样注册Gson

GsonBuilder().registerTypeAdapter(Uri::class.java, UriTypeAdapter).create()

相关问题