java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

转载请注明出处:http://blog.csdn.net/harryweasley/article/details/52612239

最近做一个项目,遇到了一个bug,在此进行记录一下。

自定义view,在用到ViewDragHelper时候,报以下的错误:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
    at com.seeyon.mobile.android.model.common.content.view.drag.ViewDragHelper.shouldInterceptTouchEvent(ViewDragHelper.java:1172)
    at com.seeyon.mobile.android.model.common.view.DropAllChildView.onInterceptTouchEvent(DropAllChildView.java:76)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2143)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)
    at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2666)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2318)

错误第二行

at com.seeyon.mobile.android.model.common.content.view.drag.ViewDragHelper.shouldInterceptTouchEvent(ViewDragHelper.java:1172)

显示viewDragHelper:1172报错,

final float dx = x - mInitialMotionX[pointerId];

这句话数组越界。
因为viewDragHelp是系统源码的,我们没必要在这里进行修改,接下来看看第三行

at com.seeyon.mobile.android.model.common.view.DropAllChildView.onInterceptTouchEvent(DropAllChildView.java:76)

DropALlChildView是我自定义的一个view,它的76行报错,76行处的代码,就这一句话:

@Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return mDragger.shouldInterceptTouchEvent(event);

    }

我们可以看出来,是因为调用了mDragger.shouldInterceptTouchEvent(event);报错的,所以在这里进行一个try catche判断:

@Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
//      return mDragger.shouldInterceptTouchEvent(event);
        try {
            //某些手机在双点操作的时候会报此错误,在此进行捕捉。
            return mDragger.shouldInterceptTouchEvent(event);
        } catch (ArrayIndexOutOfBoundsException e) {
            return false;
        }
    }

这样就解决了此问题。

其实这个是多点触碰导致的错误。

猜你喜欢

转载自blog.csdn.net/HarryWeasley/article/details/52612239