kotlin 无法将org.json.JSONArray类型的值[]转换为JSON对象

jq6vz3qz  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(228)

下面是代码。错误:无法将org.json.JSONArray类型的值[]转换为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)
        }

Here is the JSON format

8fq7wneg

8fq7wneg1#

问题在于,您试图将JSON数组视为JSON对象。您无法做到这一点。您使用JSONObjectRequest来获取数据。这将获取返回的响应,并假定它是字符串形式的JSON对象,然后将其转换为JSON对象(所以响应是一个JSONObject、不是字符串)。但是您的格式返回一个JSON数组。请改用JSONArrayRequest。然后您可以跳过第一行,因为最外层已经转换为JSON对象。
尽管如此,我还是考虑用Retrofit和GSON重写这个库。第一个库比Volley更容易使用。第二个库可以和Volley结合使用,你只需要正确地注解你的类,转换就会自动进行。

相关问题