【发布时间】:2021-07-14 13:00:43
【问题描述】:
我刚开始实习,我被要求使用 Retrofit 等进行一些基本实现。我有一个 Json 响应,它的键值会根据请求参数而变化,我不知道如何获取该值键。
像这样:
{
"status": {
/*Some other unimportant JSON here */
},
"data": {
"KEY_THAT_CHANGES": {
"id": 74,
/* more JSON here */
}
}
}
我想有多种解决方案可以获取该密钥:通过索引(因为它始终是“数据”中的第一个密钥)或通过将可序列化名称作为参数传递(因为我已经拥有密钥)或使用自定义反序列化类。
请求函数:Json中的key和symbol参数是一样的
@Headers(API_KEY)
@GET("v1/cryptocurrency/info")
fun getCoin(@Query("symbol")symbol: String):Call<CoinInfo>
我有以下数据类来保存数据:
data class CoinInfo(
val `data`: Data,
val status: Status
)
data class Status(
val credit_count: Int,
val elapsed: Int,
val error_code: Int,
val error_message: Any,
val notice: Any,
val timestamp: String
)
data class Data(
val Coin: Coin //Here is the problem, the key is dynamically changing
)
data class Coin(
val category: String,
val date_added: String,
val description: String,
val id: Int,
val is_hidden: Int,
val logo: String,
val name: String,
val notice: String,
val platform: Any,
val slug: String,
val subreddit: String,
val symbol: String,
@SerializedName("tag-groups")
val tag_groups: List<String>,
@SerializedName("tag-names")
val tag_names: List<String>,
val tags: List<String>,
val twitter_username: String,
val urls: Urls
)
请求通话
val api = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(getRequest::class.java)
GlobalScope.launch(Dispatchers.IO) {
val response = api.getCoin(coin.symbol).awaitResponse() // coin.symbol is also the key of the JSON
if(response.isSuccessful){
val data = response.body()!!
withContext(Dispatchers.Main){
// TO DO
}
}
}
我找不到任何有用的解决方案,大约 36 小时前我才开始学习 Kotlin。
【问题讨论】:
-
考虑使用
java.util.Map。
标签: android kotlin gson retrofit