DraggablePanel icon indicating copy to clipboard operation
DraggablePanel copied to clipboard

Facing Array index out of bound Exception

Open Amritpal33 opened this issue 10 years ago • 8 comments

Hi pedrovgs/Fiddl,

I am facing Arrayindex out of bound on frquently seeking the seekbar of Player.

Tested on Device Nexus 5 and Samsung S4 Android version: kitkat

Here are the Logs:

12-10 19:45:01.340: E/AndroidRuntime(1411): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(ViewDragHelper.java:1011) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.github.pedrovgs.DraggableView.onInterceptTouchEvent(DraggableView.java:290) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1859) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.app.Activity.dispatchTouchEvent(Activity.java:2458) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.View.dispatchPointerEvent(View.java:7886) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5585) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5631) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.Choreographer.doCallbacks(Choreographer.java:574) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.Choreographer.doFrame(Choreographer.java:542) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.os.Handler.handleCallback(Handler.java:733) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.os.Handler.dispatchMessage(Handler.java:95) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.os.Looper.loop(Looper.java:136) 12-10 19:45:01.340: E/AndroidRuntime(1411): at android.app.ActivityThread.main(ActivityThread.java:5001) 12-10 19:45:01.340: E/AndroidRuntime(1411): at java.lang.reflect.Method.invokeNative(Native Method) 12-10 19:45:01.340: E/AndroidRuntime(1411): at java.lang.reflect.Method.invoke(Method.java:515) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 12-10 19:45:01.340: E/AndroidRuntime(1411): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 12-10 19:45:01.340: E/AndroidRuntime(1411): at dalvik.system.NativeStart.main(Native Me

Please let me know how can i fix this.

Thanks !

Amritpal33 avatar Dec 10 '14 14:12 Amritpal33

I need time to review this. Let me check it this weekend ;)

pedrovgs avatar Dec 10 '14 14:12 pedrovgs

This happens to me too on some devices... I don't think this is bug in DraggableView, but there is simple solution - check pointerCount and if count > 1 return false :

  @Override public boolean onInterceptTouchEvent(MotionEvent ev) {
  ...

    if (action == MotionEvent.ACTION_CANCEL || 
        action == MotionEvent.ACTION_UP  || 
        ev.getPointerCount() > 1) {
      viewDragHelper.cancel();
      return false;
    }

  ...
  }

Fiddl3 avatar Dec 10 '14 14:12 Fiddl3

Hi Fiddl3, The Method is already written in the similar passion , and the crash is still there.

Amritpal33 avatar Dec 10 '14 18:12 Amritpal33

You can always catch exception and return false but you should debug ViewDragHelper.shouldInterceptTouchEvent() method because it appears that MotionEvent is changing in for loop and this cause exception, because before loop PointerCount must be grater than 1, but in second pass of for loop NullPointerException appears in line :

final float dx = x - mInitialMotionX[pointerId];

Fiddl3 avatar Dec 10 '14 18:12 Fiddl3

please try this branch https://github.com/Fiddl3/DraggablePanel/tree/viewDragHelper_issue if it fix this bug I'll create pull request

Fiddl3 avatar Dec 10 '14 20:12 Fiddl3

Do you know if this bug is still reproducible?

pedrovgs avatar Jan 18 '15 16:01 pedrovgs

For now I'm using try...catch to silence this exception, but I really don't know why it is happening even with new instance on event...

Fiddl3 avatar Jan 19 '15 00:01 Fiddl3

@Amritpal33, @Fiddl3 can we close this issue? Or can you still reproduce it with the last library version?

pedrovgs avatar Jan 27 '15 22:01 pedrovgs