Вызвано: org. json .JSONException: Индекс 2 вне диапазона [0..2) Ошибка запроса залпа - PullRequest
0 голосов
/ 05 августа 2020

Я знаю, что есть еще несколько тем на эту же тему, но еще не решил свою проблему, поэтому мне нужна помощь, если возможно. Я пытаюсь отправить запрос GET в API, используя залп в Android. Мой код kotlin показан ниже:

 val requestQueue = Volley.newRequestQueue(c)
    val sharedPref = c.getSharedPreferences(SHARED_PREFS, MODE_PRIVATE).getString(TEXT, "")
    Log.i("EDITTT", sharedPref)
    var  jsonArrayRequest = object : JsonArrayRequest(Request.Method.GET, url, null,
            Response.Listener { response ->
                var jsonArray: JSONArray = response
                for (item in 0..jsonArray.length()) {
                    var bookObject: JSONObject = jsonArray.getJSONObject(item)
                    var title: String = bookObject.getString("title")
                    var author: String = bookObject.getString("author")
                    var publisher: String = bookObject.getString("publisher")
                    var date : String = bookObject.getString("date")
                    var bookItem: BookItem = BookItem(title, author, publisher)
                    bookData.add(bookItem)
                    println(bookData)
                }
                liveBookData.setValue(bookData)

            },
            Response.ErrorListener { error ->
                Log.i("ERRORRR", error.toString())
            })
    {
        @Throws(AuthFailureError::class)
        override fun getHeaders(): Map<String, String> {
            val headers = HashMap<String, String>()
            headers.put("Authorization", "$sharedPref");
            return headers
        }
    }

И я получаю ОШИБКУ: Причина: org. json .JSONException: Индекс 2 вне диапазона [0 .. 2) Если у вас есть предложения, дайте мне знать. Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Проблема в том, что for (item in 0..jsonArray.length()) является включающим диапазоном, что означает, что если длина jsonArray равна 2 (как в вашем случае), он будет l oop 3 раза: позиции 0, 1 и 2.

Попробуйте использовать вместо него until, т.е. for (item in 0 until jsonArray.length()). Разница в том, что until не включает последний элемент, поэтому он будет l oop только 2 раза: позиции 0 и 1.

Более подробную информацию можно найти в официальной документации: https://kotlinlang.org/docs/reference/ranges.html#ranges -и-прогрессии

...