我在android直播间得到了如下的json响应:
{
"status": "ok",
"data": {
idx:7397,
aqi:71,
time:{
v:1481396400,
s:"2016-12-10 19:00:00",
tz:"-06:00"
},
city:{
name:"Chi_sp, Illinois",
url:"https://aqicn.org/city/usa/illinois/chi_sp/",
geo:["41.913600","-87.723900"]
},
iaqi:{
pm25:{
v:71
}
},
forecast:{
daily: {
pm25: [{
avg: 154,
day: "2020-06-13",
max: 157,
min: 131
}, {
avg: 163,
day: "2020-06-14",
max: 173,
min: 137
}]
}
}
}我想得到一些像aqi这样的参数。我尝试了使用Klaxon库的许多不同的方法,但都没有结果。
发布于 2020-12-23 12:38:57
在kotlin中,您可以为复杂的JSON创建数据类,如-
class MyData<A>{
lateinit var status: String
var data : A? = null
}
class Data<B,C>{
lateinit var idx: String
lateinit var aqi: String
var time: B?= null
var city: C? = null
}
class Time{
lateinit var v: String
lateinit var s: String
lateinit var tz: String
}
class City{
lateinit var name: String
lateinit var url: String
lateinit var geo: List<String>
}和克拉克森一起使用-
val result = Klaxon().parse<MyData<Data<Time, City>>>(a)发布于 2020-12-24 02:12:05
class MyData<A>{
lateinit var status: String
var data : A? = null
}
class Data<B,C>{
lateinit var idx: String
lateinit var aqi: String
var time: B?= null
var city: C? = null
}
class Time{
lateinit var v: String
lateinit var s: String
lateinit var tz: String
}
class City{
lateinit var name: String
lateinit var url: String
lateinit var geo: List<String>
}
val url = "https://...."
val jsonObjectRequest = JsonObjectRequest(
Request.Method.GET, url, null,
{ response ->
val objectString = response.toString()
val result = Klaxon().parse<MyData<Data<Time, City>>>(objectString)
binding.result.text = "$result"
},
{ error ->
binding.aqi.text = "Something went wrong!\n Please try again!"
}
)
// Access the RequestQueue through your singleton class.
MySingleton.getInstance(activity!!.applicationContext).addToRequestQueue(jsonObjectRequest)我尝试过那个方法,但得到了一个错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.cair, PID: 2718
java.lang.ClassCastException: libcore.reflect.TypeVariableImpl cannot be cast to java.lang.Class
at com.beust.klaxon.DefaultConverter.fromJsonObject(DefaultConverter.kt:200)
at com.beust.klaxon.DefaultConverter.fromJson(DefaultConverter.kt:29)
at com.beust.klaxon.JsonObjectConverter.retrieveKeyValues(JsonObjectConverter.kt:185)
at com.beust.klaxon.JsonObjectConverter.initIntoUserClass(JsonObjectConverter.kt:67)
at com.beust.klaxon.JsonObjectConverter.fromJson(JsonObjectConverter.kt:32)
at com.beust.klaxon.DefaultConverter.fromJsonObject(DefaultConverter.kt:204)
at com.beust.klaxon.DefaultConverter.fromJson(DefaultConverter.kt:29)
at com.beust.klaxon.Klaxon.fromJsonObject(Klaxon.kt:294)
at com.example.cair.fragments.InfoFragment$onCreateView$jsonObjectRequest$1.onResponse(InfoFragment.kt:343)
at com.example.cair.fragments.InfoFragment$onCreateView$jsonObjectRequest$1.onResponse(InfoFragment.kt:23)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:90)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:102)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7519)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)https://stackoverflow.com/questions/65418465
复制相似问题