2015-05-06 4 views
1
NumberPicker serviceWheel = (NumberPicker) findViewById(R.id.serviceSelector); 
serviceWheel.setMaxValue(serviceArray.length()); 
String[] profiles = new String[serviceArray.length()]; 
for (int i = 0; i < serviceArray.length(); i++){ 
    JSONObject profileObject = serviceArray.getJSONObject(i); 
    profiles[i] = profileObject.getString("description"); 
} 
serviceWheel.setDisplayedValues(profiles); 
serviceWheel.setWrapSelectorWheel(false); 


андроид, NumberPicker вне границ

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.ArrayIndexOutOfBoundsException: length=3; index=3 
      at android.widget.NumberPicker.ensureCachedScrollSelectorValue(NumberPicker.java:1756) 
      at android.widget.NumberPicker.incrementSelectorIndices(NumberPicker.java:1722) 
      at android.widget.NumberPicker.scrollBy(NumberPicker.java:1097) 
      at android.widget.NumberPicker.onTouchEvent(NumberPicker.java:880) 
      at android.view.View.dispatchTouchEvent(View.java:7565) 

serviceArray является JSONArray, с длиной 3. Я попытался добавить отступы при установке массива (serviceArray.length() + 1), но это вызвало сбой до того, как была показана активность. NumberPicker отображается нормально, но когда я просматриваю последнюю запись массива, он вылетает с этой ошибкой. Там нет ссылки на строки кода в моем коде

ответ

1

Изменение от этого:

serviceWheel.setMaxValue(serviceArray.length()); 

к этому:

serviceWheel.setMaxValue(serviceArray.length() - 1); 
0

java.lang.ArrayIndexOutOfBoundsException: длина = 3; Индекс = 3

Это означает, что вы пытаетесь получить элемент индекса 3 в чем-то длины 3.

Помните, что в компьютерной науке, мы начинаем отсчет от 0.

Просмотреть комментарии для отредактированного решения (изначально было не так).

+0

Ваш ответ правильный, но решение не имеет никакого смысла. если длина jsonarray равна 3, установка максимального значения выбора номера в 2, несомненно, опустит окончательный индекс массива. Я понимаю, что мы подсчитываем от 0 включительно, почему я попытался заполнить и т. д., и это не проблема. Я полагаю, что я всегда устанавливаю NumberPicker MaxValue на один меньше фактического количества отображаемых элементов/чисел? Что, если бы у меня был массив длины 1. максимальное значение будет 0, конечно ничего не отображаться –

+0

Вы правы. Должно должно быть 'setMaxValue (serviceArray.length())', но использовать «значение-1» для получения «реального» значения. – shkschneider

Смежные вопросы