IndexOutOfBounds в Spinner?

#android #spinner

#Android #счетчик

Вопрос:

У меня проблема с интерпретацией трассировки стека.. Проблема в том, что в моем пакете нет класса, и поэтому мне трудно выяснить, что происходит.. Когда я запускал трассировку, я думаю, что речь идет об адаптере и spinner, но на этой странице у меня есть 6 spinner, я отлаживал их все и не нашел ничего странного (например, selectedItemPosition или что-то в этом роде)..

Может быть, у кого-то была похожая проблема? Вот этот след. Если вам нужен какой-то код, скажите мне

     Uncaught handler: thread main exiting due to uncaught exception
    java.lang.IndexOutOfBoundsException
     at java.util.Arrays$ArrayList.get(Arrays.java:72)
     at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:298)
     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:351)
     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:198)
     at android.view.View.measure(View.java:7987)
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
     at android.view.View.measure(View.java:7987)
     at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:893)
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
     at android.widget.ScrollView.onMeasure(ScrollView.java:276)
     at android.view.View.measure(View.java:7987)
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
     at android.view.View.measure(View.java:7987)
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
     at android.view.View.measure(View.java:7987)
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
     at android.view.View.measure(View.java:7987)
     at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:123)
     at android.app.ActivityThread.main(ActivityThread.java:4363)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:521)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
     at dalvik.system.NativeStart.main(Native Method)
  

Я не знаю, что делать..

Комментарии:

1. Я хотел бы увидеть код.

Ответ №1:

Посмотрите, вызвана ли функция setSelection () для любого из блесен, индекс которых может превышать размер адаптера блесны. например, если ваш счетчик содержит два элемента, и если вы вызываете setSelection(2), это приведет к исключению IndexOutOfBoundsException.

Комментарии:

1. На самом деле нам понадобилось бы больше кода, чтобы знать это, но, по крайней мере, вы попробовали, ха-ха 🙂

2. У меня была такая же проблема, и да, это был неправильный setSelection (). Проблема в том, что исключение возникает не из вашего кода, а из потоков Android, поэтому трудно выяснить, в чем проблема. Удачи!

Ответ №2:

В дополнение к комментарию @ FrancescoR, этот код может помочь вам избежать сбоя вашего кода при попытке отследить ошибочный вызов. Мне пришлось сделать это ответом, потому что добавление кода в комментарии было довольно неприятным.

 private void spinnerSetSelectionChecked(Spinner spin, int index) {
    spinnerSetSelectionChecked(spin, index, true);
}
private void spinnerSetSelectionChecked(Spinner spin, int index, boolean animate) {
    final int count = spin.getAdapter().getCount();
    if( (count > 0) amp;amp; (index < count) ) {
        spin.setSelection(index, animate);
    }
    else { // do nothing
    }
}
  

Комментарии:

1. это было на самом деле, что я нашел.

2. установите для проверки spin значение null!

Ответ №3:

Чтобы найти, в каком spinner проблема:

  • Создайте резервную копию своей страницы
  • Удалить 5 из 6 блесен
  • Протестируйте страницу
  • Повторите, чтобы сохранить только 1 счетчик одновременно, пока вы не закончите тестировать каждый счетчик на своей странице

Это то, что я бы сделал. Я надеюсь, что это поможет.