我通过Retrofit从API调用返回的响应对每个对象都有一个动态值。我需要能够在每次调用时编辑@SerializedName批注中的值。 这是JSON响应:
{ "data": { "/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg": { "id": "4f7e74d1-afa8-4924-a8ab-ea9360400b", "location": "279dbcd7666b/4f7e74d1-afa8-4924-a8ab-ea9360400b.jpg", "bucket": "challenge-submit" } } }
这是我的数据类:
data class UploadLinksResponse(
@SerializedName("data")
val data: UploadData
)
data class UploadData(
@SerializedName("/storage/emulated/0/DCIM/Camera/IMG_20190920_110850.jpg")
val media: MediaLink
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
如何设置MediaLink对象的SerializedName,每次上传时该值都是唯一的?
答案 0 :(得分:1)
您需要将数据解析为Map,下面的代码可以帮助实现这一目标。
data class UploadLinksResponse(
@SerializedName("data")
@Expose
val data: Map<String, MediaLink>
)
data class MediaLink(
@SerializedName("id")
val id: String,
@SerializedName("bucket")
val bucket: String,
@SerializedName("location")
val uploadLocation: String
)
因此您将能够以映射的形式获取数据,然后您的动态数据将成为键,而相关数据将作为该键的值,那么您需要使用迭代器从键和值中获取数据(按键的值)