android - 我不能使用 Json 对象和凌空
问题描述
我不能使用 Json 对象和 volley 请帮帮我我的英语很糟糕抱歉,我无法解决我的老师在我上的课程中无法理解的错误,因为我是初学者,模拟器关闭并给出这个工作时出错,当我尝试访问 apin 中的数据时它会爆炸,我无法理解问题所在。
val url ="https://api.openweathermap.org/data/2.5/find?q=Ankara&appid=7ac4858bc53d5c6623bb4edd84b4b850&lang=tr&units=metric"
val havadurumuObjeRequest= JsonObjectRequest(Request.Method.GET,url,null,object :Response.Listener<JSONObject>{
override fun onResponse(response: JSONObject?) {
var main = response?.getJSONObject("main")
var sicaklik =main?.getInt("temp")
tvSicaklik.text=sicaklik.toString()
var sehiradi=response?.getString("name")
tvSehir.text=sehiradi
var weather=response?.getJSONArray("weather")
var aciklama=weather?.getJSONObject(0)?.getString("description")
tvAciklama.text=aciklama
var icon=weather?.getJSONObject(0)?.getString("icon")
var resimDosyaadi=resources.getIdentifier("icon_"+icon?.sonKarakterisil(),"drawable",packageName)
imgHavaDurumu.setImageResource(resimDosyaadi)
}
},object :Response.ErrorListener{
override fun onErrorResponse(error: VolleyError?) {
}
})
MySingleton.getInstance(this)?.addToRequestQueue(havadurumuObjeRequest)
}
**
解决方案
请检查您的 api,因为来自https://api.openweathermap.org/data/2.5/find?q=Ankara&appid=7ac4858bc53d5c6623bb4edd84b4b850&lang=tr&units=metric的响应是
{
"message": "accurate",
"cod": "200",
"count": 2,
"list": [
{
"id": 323786,
"name": "Ankara",
"coord": {
"lat": 39.9199,
"lon": 32.8543
},
"main": {
"temp": 8.09,
"feels_like": 4.97,
"temp_min": 7,
"temp_max": 9,
"pressure": 1010,
"humidity": 76
},
"dt": 1607911747,
"wind": {
"speed": 2.6,
"deg": 70
},
"sys": {
"country": "TR"
},
"rain": null,
"snow": null,
"clouds": {
"all": 75
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "parçalı bulutlu",
"icon": "04n"
}
]
},
{
"id": 323784,
"name": "Ankara",
"coord": {
"lat": 39.9167,
"lon": 32.8333
},
"main": {
"temp": 8.11,
"feels_like": 5,
"temp_min": 7,
"temp_max": 9,
"pressure": 1010,
"humidity": 76
},
"dt": 1607911508,
"wind": {
"speed": 2.6,
"deg": 70
},
"sys": {
"country": "TR"
},
"rain": null,
"snow": null,
"clouds": {
"all": 75
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "parçalı bulutlu",
"icon": "04n"
}
]
}
]
}
所以我们有list
一个 JsonArray,所以要获取main
, temp
... 值,需要解析
// We get list info (This is an array)
val jArr = jObj.getJSONArray("list");
// I just use only first value, if you want use all, use loop instead
val JSONdata = jArr.getJSONObject(0);
// then use as your code
var main = JSONdata?.getJSONObject("main")
var sicaklik = main?.getInt("temp")
tvSicaklik.text = sicaklik.toString()
var sehiradi = JSONdata?.getString("name")
tvSehir.text = sehiradi
var weather = JSONdata?.getJSONArray("weather")
var aciklama = weather?.getJSONObject(0)?.getString("description")
tvAciklama.text = aciklama
var icon = weather?.getJSONObject(0)?.getString("icon")
var resimDosyaadi = resources.getIdentifier("icon_"+icon?.sonKarakterisil(),"drawable",packageName)
imgHavaDurumu.setImageResource(resimDosyaadi)
推荐阅读
- android - Firebase 测试实验室对 Appium 的支持
- php - 谷歌 api 地理编码只得到一些值
- java - EditText 内容在 Listview 中每 4 个列表项重复一次
- jquery - Jquery .on(click) 寻找触发器
- php - PHP,MySQL - 如何显示值高于的所有行的所有结果
- javascript - 使用CSS单击按钮时无法更改图像
- json - 如何用 JSON 表示 PostgreSQL 中的稀疏 RDBS 列
- postgresql - psql/heroku 连接被拒绝,不接受端口 5432 上的 TCP/IP 连接
- python - 如何使子进程按键
- java - Java拼图模块应用程序:抛出java.lang.module.ResolutionException,虚假声称拆分包