获取 SerializedName 值
Posted
技术标签:
【中文标题】获取 SerializedName 值【英文标题】:Get SerializedName Values 【发布时间】:2021-12-15 14:57:50 【问题描述】:我开始学习 kotlin,需要一些帮助。
所以我的问题是如何获得我在另一个类中定义的序列化名称?
我正在使用这一行来获取所有数据:
val responseObject = Gson().fromJson(response, GifSearchResult::class.java)
Log.e("Data","" + responseObject.data)
日志是:
E/Data: GifDetails(type=gif, id=13Cmju3maIjStW, url=https://giphy.com/gifs/13Cmju3maIjStW, title=Biting Nails Reaction GIF by SpongeBob SquarePants, images=Images(original=Urls(width=500, height=373, url=https://media0.giphy.com/media/13Cmju3maIjStW/giphy.gif?cid=8d79dd67s0dkoxp1m53kmunlydxrnnuijiv917zp7qdr6tnd&rid=giphy.gif&ct=g, size=194803, mp4Url=https://media0.giphy.com/media/13Cmju3maIjStW/giphy.mp4?cid=8d79dd67s0dkoxp1m53kmunlydxrnnuijiv917zp7qdr6tnd&rid=giphy.mp4&ct=g, mp4Size=52101, webpUrl=https://media0.giphy.com/media/13Cmju3maIjStW/giphy.webp?cid=8d79dd67s0dkoxp1m53kmunlydxrnnuijiv917zp7qdr6tnd&rid=giphy.webp&ct=g, webpSize=115414), fixedWidth=Urls(width=200, height=149, url=https://media0.giphy.com/media/13Cmju3maIjStW/200w.gif?cid=8d79dd67s0dkoxp1m53kmunlydxrnnuijiv917zp7qdr6tnd&rid=200w.gif&ct=g, size=47897, mp4Url=https://media0.giphy.com/media/13Cmju3maIjStW/200w.mp4?cid=8d79dd67s0dkoxp1m53kmunlydxrnnuijiv917zp7qdr6tnd&rid=200w.mp4&ct=g..............
我只需要网址,不需要其他任何东西。
这是 GifSearchResult.class:
data class GifSearchResult(
@Expose
@SerializedName("data")
var data: List<GifDetails>,
@Expose
@SerializedName("pagination")
var pageInformation: PageInformation,
)
data class PageInformation(
@Expose
@SerializedName("total_count")
var totalCount : Int = 0,
@Expose
@SerializedName("count")
var count: Int = 0,
@Expose
@SerializedName("offset")
var offset: Int = 0
)
data class GifDetails(
@Expose
@SerializedName("type")
var type: String = "",
@Expose
@SerializedName("id")
var id: String = "",
@Expose
@SerializedName("url")
var url: String = "",
@Expose
@SerializedName("title")
var title: String = "",
@Expose
@SerializedName("images")
var images: Images = Images()
)
data class Images(
@Expose
@SerializedName("original")
var original: Urls = Urls(),
@Expose
@SerializedName("fixed_width")
var fixedWidth: Urls = Urls(),
@Expose
@SerializedName("fixed_width_downsampled")
var downSampledFixedWidth: Urls = Urls(),
@Expose
@SerializedName("downsized")
var downsized: Urls = Urls()
)
data class Urls(
@Expose
@SerializedName("width")
var width: String = "",
@Expose
@SerializedName("height")
var height: String = "",
@Expose
@SerializedName("url")
var url: String = "",
@Expose
@SerializedName("size")
var size: String = "",
@Expose
@SerializedName("mp4")
var mp4Url: String = "",
@Expose
@SerializedName("mp4_size")
var mp4Size: String = "",
@Expose
@SerializedName("webp")
var webpUrl: String = "",
@Expose
@SerializedName("webp_size")
var webpSize: String = ""
)
data class Url(
@Expose
@SerializedName("url")
var Url: String = ""
)
我只能访问分页和数据,没有字幕。
任何帮助和解释将不胜感激!
谢谢!
【问题讨论】:
我不确定您需要什么。 “字幕”是什么意思?GifSearchResult
只有两个属性:data
和 pageInformation
,那么您还想访问哪些其他数据?和@SerializedName
有什么关系?
我正在尝试获取:@SerializedName("url") 值
您是指GifDetails.url
属性的值还是所有Images.original.url
、Images.fixedWidth.url
等的值?您需要所有这些 url 的平面列表吗?
只有 GifDetails.url ,误会见谅。
【参考方案1】:
所以我设法通过运行一个循环来做到这一点:
for (i in 0 until responseObject.pageInformation.count)
Log.e("Data","" + responseObject.data[i].images.downsized.url)
【讨论】:
【参考方案2】:通常,在这种情况下,我们使用map()、flatMap() 或两者的组合。他们通过将每个项目映射/转换为新值来获取项目集合并创建另一个集合。在您的情况下,它很简单:
responseObject.data.map it.url
如果我们需要忽略空 url (""
),那么我们还可以将它们过滤掉:
responseObject.data
.map it.url
.filter it.isNotEmpty()
或者,我们可以一步完成:
responseObject.data.mapNotNull it.url.ifEmpty null
【讨论】:
以上是关于获取 SerializedName 值的主要内容,如果未能解决你的问题,请参考以下文章