TimePicker с 30-минутным интервалом не работает

Я работаю над приложением для Android и хочу установить интервал выбора времени на 30 минут вместо 1 минуты по умолчанию. Это мой код:

private void setTimePickerIntervalZeroThirtyMinutes(TimePicker timePicker) {
        int TIME_PICKER_INTERVAL = 30;
        NumberPicker minutePicker = timePicker.findViewById(Resources.getSystem().getIdentifier("minute", "id", "android"));
        minutePicker.setMinValue(0);
        minutePicker.setMaxValue((60 / TIME_PICKER_INTERVAL) + 28);
        List<String> displayedValues = new ArrayList<>();
        for(int i = 0; i < 60; i += TIME_PICKER_INTERVAL) {
            displayedValues.add(String.format("%02d", i));
        }
        minutePicker.setDisplayedValues(displayedValues.toArray(new String[0]));
    }

Если я запускаю вышеуказанную функцию, она отображает следующую ошибку:

java.lang.ArrayIndexOutOfBoundsException: length=2; index=30
        at android.widget.NumberPicker.updateInputTextView(NumberPicker.java:1990)
        at android.widget.NumberPicker.setDisplayedValues(NumberPicker.java:1554)

Я должен упомянуть, что я хочу установить минимальное значение на 0 и максимальное значение на 30, потому что в противном случае приложение не будет правильно сохранять данные в базе данных. Бот, когда я это делаю, выдает мне ошибку, которую я показал вам. Что я здесь делаю неправильно? Заранее спасибо!


person Marcel Stiube    schedule 18.02.2020    source источник
comment
Вы можете проверить это stackoverflow.com/a/13475169/3426825   -  person homerun    schedule 18.02.2020
comment
@homerun Я пробовал ваше решение, но оно не работает. Это дает мне аналогичную ошибку, о которой я сказал в вопросе   -  person Marcel Stiube    schedule 18.02.2020


Ответы (1)


Ваша проблема заключается в конструкции цикла.

  • конструкция цикла: i = 0
  • первая петля: я += 30 (i = 30)
  • вторая петля: я += 30 (i = 60)
  • 60 ‹ 60 = ложь (exit loop)

поэтому ваш массив имеет только 2 индекса, и вы пытаетесь получить доступ к чему-то, чего не существует. вот почему вы получаете ArrayIndexOutOfBoundsException. Удачного кодирования.

person homerun    schedule 19.02.2020
comment
Спасибо за ваш ответ. Теперь я знаю, в чем проблема, основываясь на вашем последнем ответе, который вы предоставили. Однако я не знаю, как поставить условие в цикл for, чтобы значения 00 и 30 отображались в средстве выбора чисел. Вы можете помочь мне с этим? - person Marcel Stiube; 19.02.2020
comment
Мне удалось решить проблему. Еще раз спасибо за вашу помощь @homerun! - person Marcel Stiube; 20.02.2020