使用API&(以及kotlin)的新用户,我在确定如何将数据从API中提取到模型对象方面遇到了一些麻烦,并且希望有人能指出我正确的方向。示例代码如下。
val request = Request.Builder().header("X-Mashape-Key", keyVal).url(url).build()
//make request client
val client = OkHttpClient()
//create request
client.newCall(request).enqueue(object: Callback {
override fun onResponse(call: Call?, response: Response?) {
//grab as string, works fine
val body = response?.body()?.string()
//make my builder, works fine
val gson = GsonBuilder().create()
// to pass type of class to kotlin ::
val cardFeed = gson.fromJson(body, CardFeed::class.java)
}
override fun onFailure(call: Call?, e: IOException?) {
println("Failed to execute request")
}
})
}
所有这些似乎都在调试中工作,我得到了字符串,并且可以看到它但是使用以下它仍然会将空转储到cardFeed / cards对象中。
class CardFeed(val cards: List<Card>)
class Card(val cardId: String, val name: String, val text: String, val flavor: String)
我从API获取的正文字符串如下所示
body:&#34; {Basic&#34;:[{&#34; key&#34;:&#34; value&#34;,etc
我假设[是什么绊倒我,但不知道如何纠正它。
任何有关正确方向的想法或推动都会非常感激,并提前感谢。
答案 0 :(得分:1)
根据您的类结构,您应该从API获取的JSON对象应该是
{
"cards":[
{
"cardId":"<cardID>",
"name":"<name>",
"flavor":"<flavor>"
},
{
"cardId":"<cardID>",
"name":"<name>",
"flavor":"<flavor>"
}
]
}
使用正确的密钥,因为当您使用gson.fromJson(body, CardFeed::class.java)
时,它会在分配的类(CardFeed.java)中查找变量名称。如果你没有正确的密钥(“cards”,“cardId”,“name”,“flavor”),gson将为值返回null
答案 1 :(得分:0)
okHttp是一个低级库。为了使用基于JSON的API,Retrofit是一个更合适的库,因为它已经有使用像GSON或Moshi这样的库的转换器来为你做所有繁重的工作。