【问题标题】:Android Spinner Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1Android Spinner 致命异常:java.lang.ArrayIndexOutOfBoundsException: length=0;指数=-1
【发布时间】:2017-09-09 12:56:45
【问题描述】:

经过几个月的测试,我们最近推出了一款应用,但我们遇到了与 Spinner 相关的异常(目前只有三星设备)。虽然我们有堆栈跟踪,但我们无法从它们那里收集到太多信息,所以我希望有人能提供一些帮助。

该问题与 HintAdapter 有关。调用 getItem 和 getView 时,适配器似乎有零项。我们并不真正了解这是如何发生的,但我们真正关心的是为什么请求的索引是 -1。有人如何选择负索引?

这是堆栈跟踪:

Fatal Exception: java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
   at java.util.ArrayList.get(ArrayList.java:413)
   at ca.example.mb.android.myexample.adapter.AbstractHintArrayAdapter.getItem(AbstractHintArrayAdapter.java:73)
   at ca.example.mb.android.myexample.adapter.AbstractHintArrayAdapter.getView(AbstractHintArrayAdapter.java:136)
   at android.widget.Spinner.makeView(Spinner.java:800)
   at android.widget.Spinner.layout(Spinner.java:748)
   at android.widget.Spinner.onLayout(Spinner.java:710)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1730)
   at android.widget.TableRow.onLayout(TableRow.java:122)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
   at android.widget.TableLayout.onLayout(TableLayout.java:445)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
   at android.widget.ScrollView.onLayout(ScrollView.java:2534)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
   at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
   at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1391)
   at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1730)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1496)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
   at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
   at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1391)
   at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
   at com.android.internal.policy.DecorView.onLayout(DecorView.java:935)
   at android.view.View.layout(View.java:18874)
   at android.view.ViewGroup.layout(ViewGroup.java:5954)
   at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2697)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2413)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1550)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7189)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
   at android.view.Choreographer.doCallbacks(Choreographer.java:734)
   at android.view.Choreographer.doFrame(Choreographer.java:670)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6776)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

这里是 HintArrayAdapter 的 getItem 和 getView 方法:

public T getItem(int position)
{
    return optionElements.get(position);
}

public View getView(int position, View convertView, @NonNull ViewGroup parent)
{
    ViewHolder viewHolder;

    if (convertView == null)
    {
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(this.getContext());
        convertView = inflater.inflate(R.layout.search_spinner_item, parent, false);
        viewHolder.textView = (TextView) convertView.findViewById(R.id.search_spinner_item_text_view);
        convertView.setTag(viewHolder);
    }
    else
    {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    T optionElement = getItem(position);

    if (optionElement != null)
    {
        String textToDisplay = getViewText(optionElement);
        viewHolder.textView.setText(textToDisplay);
    }

    return convertView;
}

【问题讨论】:

  • 您找到解决方案了吗?遇到完全相同的奇怪错误,似乎无法弄清楚。任何想法将不胜感激。

标签: android android-arrayadapter android-spinner indexoutofboundsexception


【解决方案1】:

您似乎试图在数据数组中选择一个不存在的元素,日志显示您没有任何元素,但试图到达索引 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2015-07-16
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多