Android Kotlin类型org.json.JSONArray的Value[]不能转换为JSONObject.&l



代码如下:错误: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更容易使用。第二个可以与它结合使用,你只需要正确地注释你的类,转换就会自动完成。

最新更新