emilsjolander/StickyScrollViewItems

Exception handling

Opened this issue · 3 comments

In out Project, Crashlytics informs us of a NullPointerException that we are unable to reproduce, and the stack trace does not help finding the cause of the issue.
It is not clear what went wrong, or what view was missing. This is our stack trace:

    java.lang.NullPointerException
           at com.emilsjolander.components.StickyScrollViewItems.StickyScrollView.getTopForViewRelativeOnlyChild(StickyScrollView.java:133)
           at com.emilsjolander.components.StickyScrollViewItems.StickyScrollView.doTheStickyThing(StickyScrollView.java:293)
           at com.emilsjolander.components.StickyScrollViewItems.StickyScrollView.onScrollChanged(StickyScrollView.java:286)
           at android.view.View.scrollTo(View.java:10636)
           at android.widget.ScrollView.onOverScrolled(ScrollView.java:772)
           at android.view.View.overScrollBy(View.java:17583)
           at android.widget.ScrollView.onTouchEvent(ScrollView.java:641)
           at com.emilsjolander.components.StickyScrollViewItems.StickyScrollView.onTouchEvent(StickyScrollView.java:280)
           at android.view.View.dispatchTouchEvent(View.java:7736)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2212)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
           at com.emilsjolander.components.StickyScrollViewItems.StickyScrollView.dispatchTouchEvent(StickyScrollView.java:254)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218)
           at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
           at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
           at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
           at android.app.Activity.dispatchTouchEvent(Activity.java:2466)
           at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
           at android.view.View.dispatchPointerEvent(View.java:7916)
           at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4023)
           at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3902)
           at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452)
           at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
           at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471)
           at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578)
           at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479)
           at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635)
           at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452)
           at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502)
           at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471)
           at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479)
           at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452)
           at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5657)
           at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5588)
           at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5559)
           at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5737)
           at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
           at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(InputEventReceiver.java)
           at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
           at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5710)
           at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5756)
           at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
           at android.view.Choreographer.doCallbacks(Choreographer.java:574)
           at android.view.Choreographer.doFrame(Choreographer.java:542)
           at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
           at android.os.Handler.handleCallback(Handler.java:733)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:136)
           at android.app.ActivityThread.main(ActivityThread.java:5086)
           at java.lang.reflect.Method.invokeNative(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:515)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
           at dalvik.system.NativeStart.main(NativeStart.java)

I was having a similar problem, see #14.

In my fork of this repo, I made some changes in my onLayoutNullPointerFix branch that fixed this issue for me.
https://github.com/parkin/StickyScrollViewItems/compare/onLayoutNullPointerFix

I don't remember why I didn't send in a pull request. But if you try out these changes and they 1) work and 2) don't break other functionality can you let me know?

Thanks, will check it out and let you know!

I was having this issue also. My flow for reproducing this involved removing views from the hierarchy that had the sticky tag. I ended up calling notifyStickyAttributeChanged() on my StickyScrollView when removing or adding views. This seems to work.

This has to do with the ArrayList stickyViews containing stale data once you start changing the view hierarchy, after init.

I will update you if our QA team manages to reproduce the bug again, therefor proving my fix wrong.