2015-06-21 1 views
0

Я получаю следующую трассировку стека от аварии:Android: Как я могу найти строку моего СОБСТВЕННОГО кода, который вызывает этот крах?

java.lang.IndexOutOfBoundsException: Invalid index 6, size is 2 
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
    at java.util.Arrays$ArrayList.get(Arrays.java:66) 
    at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337) 
    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:390) 
    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
    at android.widget.Spinner.makeAndAddView(Spinner.java:546) 
    at android.widget.Spinner.layout(Spinner.java:495) 
    at android.widget.Spinner.onLayout(Spinner.java:459) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1652) 
    at android.widget.TableRow.onLayout(TableRow.java:123) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.TableLayout.onLayout(TableLayout.java:448) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.widget.ScrollView.onLayout(ScrollView.java:1459) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:907) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.support.v7.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:502) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14008) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
    at android.view.Choreographer.doFrame(Choreographer.java:532) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
    at android.os.Handler.handleCallback(Handler.java:725) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5041) 
    at java.lang.reflect.Method.invokeNative(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
    at dalvik.system.NativeStart.main(NativeStart.java) 

Как я могу узнать, какую строку СВОЕЙ коды вызывает этот сбой?

+0

Попробуйте создать контрольную точку исключения – Longi

+0

как это сделать? – mrd

+0

какой IDE вы используете? Android Studio или Eclipse? – Longi

ответ

3

Некоторые аварии показывают ваш код в трассировке стека. Другие не будут. Одним из распространенных случаев «не будет» является ситуация, подобная этой, когда авария запускается чем-то, что вы делали, но работа происходит позже в главном потоке приложения.

В этом случае Spinner (по-видимому) не проверяет индекс выбора сразу, поэтому ваш вызов для его установки не сработал. Но установка этого параметра добавляет задание в рабочую очередь основного потока приложений для повторного отображения этого виджета. Когда произошло, индекс выбора был недействительным, и вы разбились.

В идеальном мире впереди будет больше проверки, так что вы потерпите неудачу на сеттере и более непосредственно увидите источник своей проблемы. И иногда это происходит. Но иногда этого не будет, и у вас останется трассировка стека, как у вас. Хотя вы не можете прямо указать на строку в своем коде и сказать «Eureka! Вот откуда моя проблема!», Вы, по крайней мере, знаете основы того, что пошло не так, и вам нужно будет дважды проверить последние изменения, которые вы, возможно, сделали которые влияют на аварийный виджет.

Смежные вопросы