2

In my application, I am facing a weird issue. And this happens only on Android 6. It doesn't crash on version higher than 6.0 I cannot add code because I have no idea where exactly is the crash.

Is there any way to find out what can be an issue. All I have is a full stack trace.

I think this due change in behaviour of ListView in Android 6, but cannot exactly sure about it.

Fatal Exception: java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
   at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
   at java.util.ArrayList.get(ArrayList.java:308)
   at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
   at android.widget.ListView.dispatchDraw(ListView.java:3327)
   at android.view.View.draw(View.java:16276)
   at android.widget.AbsListView.draw(AbsListView.java:4316)
   at android.view.View.updateDisplayListIfDirty(View.java:15269)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3599)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3579)
   at android.view.View.updateDisplayListIfDirty(View.java:15229)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3599)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3579)
   at android.view.View.updateDisplayListIfDirty(View.java:15229)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3599)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3579)
   at android.view.View.updateDisplayListIfDirty(View.java:15229)
   at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3599)
   at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3579)
   at android.view.View.updateDisplayListIfDirty(View.java:15229)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1379)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.draw(View.java:16276)
   at android.view.View.updateDisplayListIfDirty(View.java:15269)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.updateDisplayListIfDirty(View.java:15264)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.updateDisplayListIfDirty(View.java:15264)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.updateDisplayListIfDirty(View.java:15264)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.updateDisplayListIfDirty(View.java:15264)
   at android.view.View.draw(View.java:16043)
   at android.view.ViewGroup.drawChild(ViewGroup.java:3615)
   at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3405)
   at android.view.View.draw(View.java:16276)
   at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2740)
   at android.view.View.updateDisplayListIfDirty(View.java:15269)
   at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:295)
   at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:301)
   at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:336)
   at android.view.ViewRootImpl.draw(ViewRootImpl.java:2760)
   at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2564)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2164)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1174)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6241)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:873)
   at android.view.Choreographer.doCallbacks(Choreographer.java:676)
   at android.view.Choreographer.doFrame(Choreographer.java:606)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:859)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:168)
   at android.app.ActivityThread.main(ActivityThread.java:5845)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
Avinash Shinde
  • 199
  • 2
  • 12
  • search on google `IndexOutOfBoundsException` – IntelliJ Amiya Dec 28 '17 at 09:18
  • 1
    Possible duplicate of [How to debug Android java.lang.IndexOutOfBoundsException HeaderViewListAdapter.java line](https://stackoverflow.com/questions/34496276/how-to-debug-android-java-lang-indexoutofboundsexception-headerviewlistadapter-j) – Sunil Sunny Dec 28 '17 at 09:21
  • Try debugging, add breakpoints and check where went wrong – Melchizedek Dec 28 '17 at 09:24
  • at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164) indicated that adapter trying to call isEnabled() on non-existed-data in your data array list which shown that some part of your adapter (probably getSize()) in your adapter doesn't return correct index, which caused ArrayindexOutOfBoundException. For more information and further investigation, please provide your adapter's code – JiratPasuksmit Dec 28 '17 at 09:25
  • Is there an error log before this one ? – John Le Dec 28 '17 at 09:35
  • can u put the code of activity or fragment where this exception was thrown ? – Md.ibrahim khalil Dec 28 '17 at 09:36

1 Answers1

0

I found a scenario which solved my issue.

  1. I had a list which had its own data.
  2. One option was to refresh list. So here, cleared ArrayList >> get new data from API (2-3 secs delay) >> added to ArrayList >> Notify dataset changed.

  3. The problem was I didn't notify dataset immediately after clearing the ArrayList. (Because it would flicker)

Solution: I managed to clear data, add new data and notify at the same time (After API call).

Still wondering why did it only crashed on Android 6.0

Avinash Shinde
  • 199
  • 2
  • 12