代码如下:错误:org.json.JSONArray类型的Value[]不能转换为JSONObject
json新功能。得到这个异常
请帮忙谢谢!
findViewById<Button>(R.id.search1).setOnClickListener(){
val queue :RequestQueue = Volley.newRequestQueue(applicationContext)
val request = JsonObjectRequest(Request.Method.GET, url, null, { response ->
Log.d("Json",">>Response")
try {
val dataArray = JSONArray(response)
for (i in 0 until dataArray.length()) {
val bookList = BookList()
val dataObject = dataArray.getJSONObject(i)
bookList.add(Book(dataObject.getInt("book_id"), dataObject.getString("book_title"),
dataObject.getString("author_name"),dataObject.getString("cover_uri")))
println(bookList)
}
} catch (e: Exception) {
e.printStackTrace()
}
}, { error ->
Log.e("TAG", "RESPONSE IS $error")
Toast.makeText(this@MainActivity, "Fail to get response", Toast.LENGTH_SHORT)
.show()
})
queue.add(request)
}
下面是JSON格式
问题是您试图将JSON数组视为JSON对象。你不能这么做。您正在使用JSONObjectRequest来获取数据。这将接受返回的响应,并假设它是字符串形式的JSON对象,并将其转换为JSON对象(因此响应是JSONObject,而不是字符串)。但是你的格式返回一个JSON数组。使用JSONArrayRequest代替。然后你可以跳过第一行在你的尝试,因为最外层已经转换为JSON对象。
虽然真的-我会考虑使用Retrofit和GSON重写这个。第一个库比Volley更容易使用。第二个可以与它结合使用,你只需要正确地注释你的类,转换就会自动完成。