3

I have a problem to find out where is fault in my source code.

Is there any way how can I resolve it ?

There was thrown "ArrayIndexOutOfBoundsException" in my code but I can't find out where.

logcat in android studio:

07-29 22:31:26.745  11782-11782/com.example.petr.myapp1 E/InputEventReceiver﹕ Exception dispatching input event.
07-29 22:31:26.745  11782-11782/com.example.petr.myapp1 D/AndroidRuntime﹕ Shutting down VM
07-29 22:31:26.745  11782-11782/com.example.petr.myapp1 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41595ba8)
07-29 22:31:26.745  11782-11782/com.example.petr.myapp1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.petr.myapp1, PID: 11782
    java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
            at android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(ViewDragHelper.java:1004)
            at android.support.v4.widget.DrawerLayout.onInterceptTouchEvent(DrawerLayout.java:979)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1859)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
            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:2458)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
            at android.view.View.dispatchPointerEvent(View.java:7886)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
            at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532)
            at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512)
            at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483)
            at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612)
            at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
            at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
            at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
            at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5585)
            at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5631)
            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:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            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(Native Method)
kingston
  • 11,053
  • 14
  • 62
  • 116
Petofi
  • 481
  • 5
  • 16

3 Answers3

2

I was able to solve this issue thanks to this. To solve this issue two methods need to be overridden in the ViewGroup.

  • requestDisallowInterceptTouchEvent(boolean disallowIntercept)
  • dispatchTouchEvent(MotionEvent ev)

The requestDisallowInterceptTouchEvent is set up as so:

@Override
public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    Log.i(TAG, "In requestDisallowInterceptTouchEvent!!!");
    mIsDisallowIntercept = disallowIntercept;
    super.requestDisallowInterceptTouchEvent(disallowIntercept);
}

Store the disallowIntercept localy:

private boolean mIsDisallowIntercept = false;

Then dispatchTouchEvent is set up as so:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getPointerCount() > 1 && mIsDisallowIntercept) {
        requestDisallowInterceptTouchEvent(false);
        boolean handled = super.dispatchTouchEvent(ev);
        requestDisallowInterceptTouchEvent(true);
        return handled;
    } else {
        return super.dispatchTouchEvent(ev);
    }
}

Other solutions included overriding onInterceptTouchEvent as so:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) { 
        if( _locked ) {
            return false;
        } else {
            try{
                return super.onInterceptTouchEvent(ev);
            }catch(IllegalArgumentException ex){
                ex.printStackTrace();
            }
        }
        return false;
}

This method didn't help me, but it might help others. This solution was found here.

I hope this helps.

0

Similar issue was reported on google at https://code.google.com/p/android/issues/detail?id=182262

But after releas of Android Support Library, revision 23.2.1 (March 2016) This issue has been resolved.

update Support Library to Android Support Library to 23.2.1

Amit Vaghela
  • 22,772
  • 22
  • 86
  • 142
  • This problem still unresolved. I am using Android Support Library to 23.2.1 in our app and still crashes for some of our Samsung users on Android 5.1.1. Here is another link to this issue http://stackoverflow.com/questions/30986163/arrayindexoutofboundsexception-while-dismissing-snackbar-viewdraghelper – ernestkamara Jul 04 '16 at 08:38
  • I'm using 23.4.0, still seeing it. Best to update the closed issue report @ code.google.com, or create a new one? – jkane001 Aug 01 '16 at 14:08
  • Mee to. I see the issue with 23.4.0 – kingston Nov 04 '16 at 16:40
  • Okay. I can't help you out with this but if I get the solution I will surely inform you. – Amit Vaghela Nov 04 '16 at 17:22
0

Look into this issue on google ViewDragHelper.java saveLasMotion java.lang.ArrayIndexOutOfBoundsException

It seems solved in Android Support Library 24.1.0. So update to that or set a try catch to workaround

shuo Han
  • 79
  • 6