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 отображается нормально, но когда я просматриваю последнюю запись массива, он вылетает с этой ошибкой. Там нет ссылки на строки кода в моем коде
Ваш ответ правильный, но решение не имеет никакого смысла. если длина jsonarray равна 3, установка максимального значения выбора номера в 2, несомненно, опустит окончательный индекс массива. Я понимаю, что мы подсчитываем от 0 включительно, почему я попытался заполнить и т. д., и это не проблема. Я полагаю, что я всегда устанавливаю NumberPicker MaxValue на один меньше фактического количества отображаемых элементов/чисел? Что, если бы у меня был массив длины 1. максимальное значение будет 0, конечно ничего не отображаться –
Вы правы. Должно должно быть 'setMaxValue (serviceArray.length())', но использовать «значение-1» для получения «реального» значения. – shkschneider