Java ViewDragHelper.gettouchlop()上的NullPointerException

Java ViewDragHelper.gettouchlop()上的NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,我有一个问题,一个我无法复制的奇怪问题,但我看到很多用户都存在这个问题。飞机失事了。问题是: 致命异常:java.lang.NullPointerException 尝试在空对象引用上调用虚拟方法“int android.support.v4.widget.ViewDragHelper.gettouchlop()” 目前,我已将支持库设置为28.0.0 我不知道下一步该尝试什么,因为我不明白这个bug是从哪里来的,我无法复制它 final SUPPORT_LIBRARY_VERSION = '2

我有一个问题,一个我无法复制的奇怪问题,但我看到很多用户都存在这个问题。飞机失事了。问题是:

致命异常:java.lang.NullPointerException 尝试在空对象引用上调用虚拟方法“int android.support.v4.widget.ViewDragHelper.gettouchlop()”

目前,我已将支持库设置为28.0.0

我不知道下一步该尝试什么,因为我不明白这个bug是从哪里来的,我无法复制它

final SUPPORT_LIBRARY_VERSION = '28.0.0'

// Support
implementation "com.android.support:design:$SUPPORT_LIBRARY_VERSION"
implementation "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"
implementation "com.android.support:cardview-v7:$SUPPORT_LIBRARY_VERSION"
implementation "com.android.support:recyclerview-v7:$SUPPORT_LIBRARY_VERSION"
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
implementation "com.android.support:exifinterface:$SUPPORT_LIBRARY_VERSION"
implementation "com.android.support:support-media-compat:$SUPPORT_LIBRARY_VERSION"
implementation "com.android.support:support-v4:$SUPPORT_LIBRARY_VERSION"
这是我的日志

       at android.support.design.widget.BottomSheetBehavior.onTouchEvent(BottomSheetBehavior.java:350)
       at android.support.design.widget.CoordinatorLayout.performIntercept(CoordinatorLayout.java:476)
       at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:527)
       at android.view.View.dispatchTouchEvent(View.java:9390)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2549)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461)
       at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1777)
       at android.app.Activity.dispatchTouchEvent(Activity.java:2865)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422)
       at android.view.View.dispatchPointerEvent(View.java:9610)
       at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4447)
       at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4313)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3992)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4049)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6146)
       at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6120)
       at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6081)
       at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6262)
       at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:330)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5621)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

--

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v4.widget.ViewDragHelper.getTouchSlop()' on a null object reference
       at android.support.design.widget.BottomSheetBehavior.onTouchEvent(BottomSheetBehavior.java:350)
       at android.support.design.widget.CoordinatorLayout.performIntercept(CoordinatorLayout.java:476)
       at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:527)
       at android.view.View.dispatchTouchEvent(View.java:9390)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2549)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461)
       at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1777)
       at android.app.Activity.dispatchTouchEvent(Activity.java:2865)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422)
       at android.view.View.dispatchPointerEvent(View.java:9610)
       at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4447)
       at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4313)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3992)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4049)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6146)
       at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6120)
       at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6081)
       at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6262)
       at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:330)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5621)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

#0. Crashed: main
       at android.support.design.widget.BottomSheetBehavior.onTouchEvent(BottomSheetBehavior.java:350)
       at android.support.design.widget.CoordinatorLayout.performIntercept(CoordinatorLayout.java:476)
       at android.support.design.widget.CoordinatorLayout.onTouchEvent(CoordinatorLayout.java:527)
       at android.view.View.dispatchTouchEvent(View.java:9390)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2549)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2555)
       at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
       at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2461)
       at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1777)
       at android.app.Activity.dispatchTouchEvent(Activity.java:2865)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
       at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2422)
       at android.view.View.dispatchPointerEvent(View.java:9610)
       at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4447)
       at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4313)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3992)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4049)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3900)
       at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3866)
       at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3874)
       at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3847)
       at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6146)
       at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6120)
       at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6081)
       at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6262)
       at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:192)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:330)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:5621)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

目前,我扩展了许多片段(几乎所有的片段)

在源代码中检查用于读取以下内容的行:

return action == MotionEvent.ACTION_MOVE
        && scroll != null
        && !ignoreEvents
        && state != STATE_DRAGGING
        && !parent.isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY())
        && Math.abs(initialY - event.getY()) > viewDragHelper.getTouchSlop();
  }
显示为在更高版本中读取:

 return action == MotionEvent.ACTION_MOVE
        && scroll != null
        && !ignoreEvents
        && state != STATE_DRAGGING
        && !parent.isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY())
        && viewDragHelper != null
        && Math.abs(initialY - event.getY()) > viewDragHelper.getTouchSlop();
  }
看来应该修好了。尽管其他一些函数似乎可以清除viewDragHelper值,因此通常很难重现

在某些版本中,如果在调用onLayoutChild()之前执行触摸移动,似乎可能会出现空指针错误。这似乎很难做到。但是,没有明确检查它

显然,它应该是固定的,但我没有看到源代码中的显式检查,它们的复制步骤可能会对您有所帮助

“这可能发生在较旧/较慢的设备上,通过向用户滥发触摸事件 布局正在构建时的底页。”


潜在的亲密选民注意:我不相信“What is a NullPointerException?”重复在本例中适用,因为这是Android SDK内部类的问题。stacktrace中似乎没有任何对OP应用程序的直接引用。通过调用stacktrace中的
BottomSheet Behavior
进行猜测,您是否在应用程序中的任何位置使用
BottomSheet
的实例?如果是这样,你能试着拖动它看看会发生什么吗?@MichaelDodd是的,我确实在应用程序中使用过它。实际上很多。我扩展了很多片段的
BottomSheetDialogFragment
。我无法复制它,我尝试过拖动、单击、关闭等等,没有任何效果,我无法复制它,但我可以看到,某些百分比的用户确实存在此问题