如何本地化的故障源$ C $ C [英] How localized fault in source code
问题描述
我有一个问题,找出故障是在我的源$ C $ C。
有什么办法我该怎么解决?
有被抛出的ArrayIndexOutOfBoundsException异常在我的code,但我找不到在哪里。
的logcat 在Android Studio中:
07-29 22:31:26.745 11782-11782 / com.example.petr.myapp1 E / InputEventReceiver:异常调度输入事件。
07-29 22:31:26.745 11782-11782 / com.example.petr.myapp1 D / AndroidRuntime:关闭VM
07-29 22:31:26.745 11782-11782 / com.example.petr.myapp1 W / dalvikvm:主题ID = 1:螺纹未捕获的异常退出(组= 0x41595ba8)
07-29 22:31:26.745 11782-11782 / com.example.petr.myapp1 E / AndroidRuntime:致命异常:主要
工艺:com.example.petr.myapp1,PID:11782
java.lang.ArrayIndexOutOfBoundsException:长度= 1;索引= 1
在android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(ViewDragHelper.java:1004)
在android.support.v4.widget.DrawerLayout.onInterceptTouchEvent(DrawerLayout.java:979)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1859)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
在com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
在android.app.Activity.dispatchTouchEvent(Activity.java:2458)
在com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
在android.view.View.dispatchPointerEvent(View.java:7886)
在android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3947)
在android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3442)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3411)
在android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3518)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3419)
在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3575)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3442)
在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3411)
在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3419)
在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3392)
在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5532)
在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5512)
在android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5483)
在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5612)
在android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
在android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(本机方法)
在android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:176)
在android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5585)
在android.view.ViewRootImpl $ ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5631)
在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:761)
在android.view.Choreographer.doCallbacks(Choreographer.java:574)
在android.view.Choreographer.doFrame(Choreographer.java:542)
在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:747)
在android.os.Handler.handleCallback(Handler.java:733)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5001)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
我是能够解决这个问题感谢的这个。为了解决这个问题,两种方法需要在ViewGroup中被覆盖。
- requestDisallowInterceptTouchEvent(布尔disallowIntercept)
- dispatchTouchEvent(MotionEvent EV)
该requestDisallowInterceptTouchEvent设置为这样:
@覆盖
公共无效requestDisallowInterceptTouchEvent(布尔disallowIntercept){
Log.i(TAG,在requestDisallowInterceptTouchEvent !!!);
mIsDisallowIntercept = disallowIntercept;
super.requestDisallowInterceptTouchEvent(disallowIntercept);
}
localY坐标存放disallowIntercept:
私人布尔mIsDisallowIntercept = FALSE;
然后dispatchTouchEvent设置为这样:
@覆盖
公共布尔dispatchTouchEvent(MotionEvent EV){
如果(ev.getPointerCount()→1&放大器;&放大器; mIsDisallowIntercept){
requestDisallowInterceptTouchEvent(假);
布尔处理= super.dispatchTouchEvent(EV);
requestDisallowInterceptTouchEvent(真);
返回处理;
}其他{
返回super.dispatchTouchEvent(EV);
}
}
其他的解决方案包括首要onInterceptTouchEvent像这样:
@覆盖
公共布尔onInterceptTouchEvent(MotionEvent EV){
如果(_locked){
返回false;
}其他{
尝试{
返回super.onInterceptTouchEvent(EV);
}赶上(抛出:IllegalArgumentException前){
ex.printStackTrace();
}
}
返回false;
}
这个方法并没有帮助我,但它可能会帮助别人。该解决方案被发现。
我希望这有助于。
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)
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.
这篇关于如何本地化的故障源$ C $ C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!