gpt4 book ai didi

java - ViewDragHelper.getTouchSlop() 上的 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:33 25 4
gpt4 key购买 nike

我有一个问题,一个我无法复制的奇怪问题,但我发现很多用户都存在这个问题。崩溃在 Crashlitycs 中被捕获。问题是:

Fatal Exception: java.lang.NullPointerException Attempt to invoke virtual method 'int android.support.v4.widget.ViewDragHelper.getTouchSlop()' on a null object reference

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

我不知道接下来要尝试什么,因为我不明白这个错误是从哪里来的,而且我无法重现它

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)

目前我为很多 fragment 扩展了 BottomSheetDialogFragment(好吧,几乎所有 fragment )

最佳答案

在源代码中检查用于读取的行:

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() 被调用之前执行触摸移动,您似乎可能会遇到空指针错误。看起来这可能很难做到。但是,没有明确检查它。

显然它是应该被修复的,但我没有在源代码中看到明确的检查,它们的复制步骤可能对你有帮助。

https://github.com/material-components/material-components-android/issues/43

"This can occur on older/slower devices by spamming touch events to the bottom sheet whilst the layout is being constructed."

关于java - ViewDragHelper.getTouchSlop() 上的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56523241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com