【问题标题】:IndexOutOfBounds on Spinner?微调器上的 IndexOutOfBounds?
【发布时间】:2014-09-03 20:53:01
【问题描述】:

我对堆栈跟踪的解释有疑问。问题是我的包中没有类,所以我很难找出发生了什么。当我闲置跟踪时,我认为这是关于适配器和微调器,但在那个页面上我有 6 个微调器,我调试了它们并没有发现任何奇怪的东西(比如 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)

我不知道该怎么办..

【问题讨论】:

  • 我想看代码。

标签: android spinner


【解决方案1】:

查看您是否在任何索引可能大于微调器适配器大小的微调器上调用了 setSelection()。例如如果您的微调器有两个项目,并且如果您调用 setSelection(2),这将导致 IndexOutOfBoundsException 异常。

【讨论】:

  • 确实我们需要更多的代码才能知道这一点,但至少你试了一下哈哈 :)
  • 我遇到了同样的问题,是的,这是一个错误的 setSelection()。问题是异常不是来自您的代码,而是来自android的线程,因此很难找出问题所在。祝你好运!
【解决方案2】:

进一步@FrancescoR 的评论,此代码可以帮助您避免代码在您尝试追踪错误调用时崩溃。我不得不做出这个回复,因为在 cmets 中添加代码非常讨厌。

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) && (index < count) ) {
        spin.setSelection(index, animate);
    }
    else { // do nothing
    }
}

【讨论】:

  • 这实际上是我发现的。
  • 设置旋转为空检查!
【解决方案3】:

要找出问题所在的微调器:

  • 制作页面的备份副本
  • 删除 6 个微调器中的 5 个
  • 测试页面
  • 重复以一次只保留 1 个微调器,直到您完成对页面上每个微调器的测试

这就是我要做的。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多