Android Spinner致命异常:java.lang.ArrayIndexOutOfBoundsException:length = 0;指数= -1

时间:2017-09-09 12:56:45

标签: android android-arrayadapter android-spinner indexoutofboundsexception

我们最近在经过数月的测试后开始使用应用程序,我们得到一个与Spinner相关的例外(到目前为止只有三星设备)。虽然我们有堆栈跟踪,但我们无法收集他们的大量信息,所以我希望有人可以提供一些帮助。

该问题与HintAdapter有关。调用getItem和getView时,适配器似乎没有项目。我们真的不明白这是怎么回事,但我们真正关心的是为什么请求的索引是-1。有人如何选择负面指数?

这是stacktrace:

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;
}

0 个答案:

没有答案