Как исправить ошибку json.JSONException: индекс 1 вне диапазона [0..1)

1

Мой проект получить информацию о времени билета на автобус от API. Но он не показывает время прохождения, если нет данных о времени возврата с сервера. Это сообщение об ошибке при отправке запроса залпом.

Ошибка json.JSONException: индекс 1 вне диапазона [0..1)

фрагмент кода

private void sendRequest(final String owner, final Map<String, String> header) {
    StringRequest stringRequest = new StringRequest(Request.Method.POST, MyConstants.URL + owner,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                 //   Log.e("AAAA" + owner, response);
                    try {
                        JSONObject object = new JSONObject(response);
                        if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_NOTAVAILABLE)) {
                            // servisten gelen cevap not_available ise
                            //// owner
                            sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_NOTAVAILABLE);
                        } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_SUCCESS)) {
                            JSONArray result = object.getJSONArray(MyConstants.SERVICE_RESULT);
                            JSONArray resultGoing = result.getJSONObject(0).getJSONArray("going");
                            if (has_return) {
                                JSONArray resultReturn = result.getJSONObject(1).getJSONArray("round");
                                sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_RETURN, resultReturn);
                            }
                            sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_GOING, resultGoing);
                        } else if (object.getString(MyConstants.SERVICE_STATUS).equals(MyConstants.SERVICE_RESPONSE_STATUS_FAİLURE)) {
                            sendVoyagesErrorBroadcast(owner, MyConstants.ERROR_SERVER);
                        }
                    } catch (JSONException e) {
                        Log.e("search" + owner + "VoyagesErr1", e.toString());
                        e.printStackTrace();
                    }
                }
Теги:
android-volley

1 ответ

1
Лучший ответ

Пожалуйста, проверьте следующий код

 if (has_return) {
     JSONArray resultReturn = result.getJSONObject(1).getJSONArray("round");
     sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_RETURN, resultReturn);
  }

Вы пытаетесь получить доступ к элементу по индексу 1, который, вероятно, отсутствует. Индекс начинается с 0, а не с 1, и, следовательно, даже если размер массива json равен 1, он выдаст ошибку

попробуйте сделать что-то вроде этого

if (has_return) {
    if (result.length() > 1)
        JSONArray resultReturn = result.getJSONObject(1).getJSONArray("round");
        sendVoyagesArrayBroadcast(owner + MyConstants.DIRECTION_RETURN, resultReturn);
    }
}

или, если вы заинтересованы в первом элементе, то доступ к нему, как

if (result.length() > 0) {
    JSONArray resultReturn = result.getJSONObject(0).getJSONArray("round");
}
  • 0
    Да, это работает для проверки размера массива. Но у меня сейчас другая проблема. Если resultGoing не равен null, sendVoyagesBroadcast должен работать, иначе sendVoyagesErrorBroadcast должен работать. Это должно работать так же и для resultReturn. Я не могу сделать код правды для этого.
  • 0
    какими должны быть данные, переданные в таком случае, ваша точка зрения мне не ясна
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню