Kiwix-android: App crash after refreshing Library fragment

Created on 16 Mar 2018  路  20Comments  路  Source: kiwix/kiwix-android

For a Bug Report:

Bug Report

Are you ready to report?

  • Your issue may already be reported! Please search on the issue track before creating one.
  • Ensure you have tested with the last (dev) version of the software. (If not, and if possible, run your test again with the most recent version available.)

Environment

  • version of the software you use : 2.3 Build: 55, Build variant: kiwixDebug
  • device / operating system : Moto G4 Plus

The Bug:

  • What do you obtain? A copy of the error message or a screenshot is always useful.
03-16 11:09:04.504 30325-30325/org.kiwix.kiwixmobile E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: org.kiwix.kiwixmobile, PID: 30325
                                                                       java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
                                                                           at java.util.ArrayList.get(ArrayList.java:411)
                                                                           at org.kiwix.kiwixmobile.library.LibraryAdapter.getView(LibraryAdapter.java:148)
                                                                           at android.widget.AbsListView.obtainView(AbsListView.java:2378)
                                                                           at android.widget.ListView.makeAndAddView(ListView.java:1970)
                                                                           at android.widget.ListView.fillDown(ListView.java:704)
                                                                           at android.widget.ListView.fillSpecific(ListView.java:1412)
                                                                           at android.widget.ListView.layoutChildren(ListView.java:1708)
                                                                           at android.widget.AbsListView.onLayout(AbsListView.java:2170)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:611)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           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:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1769)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
                                                                           at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                           at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
                                                                           at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:874)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                           at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                           at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                           at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           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:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           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:729)
                                                                           at android.view.View.layout(View.java:17641)
                                                                           at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                           at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
                                                                           at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
                                                                           at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                                           at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6344)
                                                                           at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                                           at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                           at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                                           at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
                                                                           at android.os.Handler.handleCallback(Handler.java:751)
03-16 11:09:04.504 30325-30325/org.kiwix.kiwixmobile E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6186)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
  • When does this occur?

Steps to reproduce:

  1. Open Library fragment
  2. open search.
  3. Search for some random string.
  4. Press back to go back to library fragment
  5. Swipe refresh
    ...

  6. What should be the behavior from your point of view? How do you expect the service to work?
    The app does not crash if we press the search button and then go back. The same should be implemented on back press.

bug

All 20 comments

@kelson42 @mhutti1 Can you try to reproduce this?

@harshvardhan-takawale why? If you have it, this is good enough.

@harshvardhan-takawale i tried reproducing it but it didn't crash for me.

@GeVic you will have to press back twice, to the point where the bar reads Library as the heading. Then swipe to refresh.

@harshvardhan-takawale i tried but it didn't crash.
Should i send you a gif?

@GeVic Yes please.

@harshvardhan-takawale so yes it crashed and goes back to wiki page but it happened only once in 10-15 tries.
Is it happening consecutively for you?

@GeVic Yes it happens everytime I do it.

@harshvardhan-takawale Let me send you a gif in some time

test1

@harshvardhan-takawale This is what i am getting and occasionally it crashes also.

@GeVic No no, you are getting me wrong. Open the online tab. Let it load. Go to search and type something random. Press back twice to get back and then refresh.

@harshvardhan-takawale i did that only, actually i uploaded the wrong gif

@harshvardhan-takawale can you check the video on below link please, i dont have my laptop handy right now.
https://drive.google.com/a/bennett.edu.in/file/d/1cZ-sxdb-XjuIXpWgG_k_6--BWnl9xJQW/view?usp=drivesdk

@GeVic You are doing all the steps correctly. Something seems to be wrong. I have to do a bit more research. You are using kiwixDebug only right?

@harshvardhan-takawale yes.

Tried out the same on Emulator Android 8.1.0 same version and build. It didn't crash for me. I tried several times, no crash was observed.

My personal experience is that the library, during a download, crashes time to time.... sporadically. I can not tell why or how to make it reproducible.... but quite sure something here is not properly implemented. One point which seems weak is the handling of download termination, time to time the item is stuck inthe downloading tab and does not want to migrate to the device tab... clicking on it brings the app to crash.

@kelson42 @harshvardhan-takawale to be precise it crashes only when i click back while the searching of results still processing, then only it crashes to the main page of the app.

I am able to reproduce the error reliably, is it fine that I work on it?

03-23 22:26:45.408 16637-16637/org.kiwix.kiwixmobile E/AndroidRuntime: FATAL EXCEPTION: main Process: org.kiwix.kiwixmobile, PID: 16637 java.lang.IndexOutOfBoundsException: Invalid index 4, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at org.kiwix.kiwixmobile.library.LibraryAdapter.getView(LibraryAdapter.java:148) at android.widget.AbsListView.obtainView(AbsListView.java:2346) at android.widget.ListView.makeAndAddView(ListView.java:1876) at android.widget.ListView.fillDown(ListView.java:702) at android.widget.ListView.fillSpecific(ListView.java:1367) at android.widget.ListView.layoutChildren(ListView.java:1663) at android.widget.AbsListView.onLayout(AbsListView.java:2148) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:611) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1769) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:874) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2684) at android.view.View.layout(View.java:16692) at android.view.ViewGroup.layout(ViewGroup.java:5445) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2178) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1938) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1114) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6068) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.hand 03-23 22:26:45.408 16637-16637/org.kiwix.kiwixmobile D/AppTracker: App Event: crash

This kind of bug should have been fixed with 2.5 by @macgills

Was this page helpful?
0 / 5 - 0 ratings