如何解决Android Kotlin Volley 如何从 JSONArray 中获取值
我想通过 Volley for 循环在“media_gallery_entries”JSONArray 中获取“文件”
凌空
val item = ArrayList<RecyData>()
val jsonRequest = object : JsonObjectRequest(Request.Method.GET,url,null,Response.Listener { response ->
try {
val jsonArrayItems = response.getJSONArray("items")
val jsonSize = jsonArrayItems.length()
for (i in 0 until jsonSize) {
val jsonObjectItems = jsonArrayItems.getJSONObject(i)
val pName = jsonObjectItems.getString("name")
val pPrice = jsonObjectItems.getInt("price")
item.add(RecyData(pName,pPrice,pImage))
}
} catch (e: JSONException) {
e.printstacktrace()
}
数据
{
"items": [
{
"id": 1,"sku": "10-1001","name": "item01","price": 100,"media_gallery_entries": [
{
"id": 1,"file": "//1/0/10-28117_1_1.jpg"
}
]
}
]
}
解决方法
您可以使用一些解析库,例如经过良好测试且不太可能导致任何问题的 Gson,而不是执行总是容易出错的手动 JSON
解析
要首先使用 Gson
,您需要在 build.gradle 中添加依赖项
implementation 'com.google.code.gson:gson:2.8.7'
现在定义映射到您的 JSON 响应的 kotlin 类型
class Media(
val id: Int,val file: String
)
class Entry(
val id: Int,val sku: String,val name: String,val price: Int,val media_gallery_entries: List<Media>
)
现在在响应监听器中做
try{
val jsonArrayItems = response.getJSONArray("items")
val token = TypeToken.getParameterized(ArrayList::class.java,Entry::class.java).type
val result:List<Entry> = Gson().fromJson(jsonArrayItems.toString(),token)
// Do something with result
}
catch (e: JSONException) {
e.printStackTrace()
}
,
在 val pPrice = jsonObjectItems.getInt("price")
这一行之后试试这个代码
val mediaEntryArr = jsonObjectItems.getJSONArray("media_gallery_entries")
for(j in 0 until mediaEntryArr.length()){
val mediaEntryObj = mediaEntryArr.getJSONObject(j)
val id = mediaEntryObj.getString("id")
val file = mediaEntryObj.getString("file")
Log.e("mediaEntry----",""+ Gson().toJson(mediaEntryObj))
Log.e("id----",""+ id)
Log.e("file----",""+ file)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。