NullPointerException для ViewDragHelper.getTouchSlop () - PullRequest
5 голосов
/ 10 июня 2019

У меня есть проблема, странная, которую я не могу воспроизвести, но я вижу, что проблема существует у многих пользователей. Авария поймана в Crashlitycs. Вопрос:

Неустранимое исключение: java.lang.NullPointerException Попытка вызвать виртуальный метод 'int android.support.v4.widget.ViewDragHelper.getTouchSlop ()' для ссылки на пустой объект

В настоящее время я установил библиотеку поддержки на 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"

Вот мой Logcat

       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)

В настоящее время я расширяю BottomSheetDialogFragment для множества фрагментов (ну, почти все из них)

1 Ответ

0 голосов
/ 10 июня 2019

Возвращение в исходном коде строки, которая использовалась для чтения:

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

"Это может происходить на старых / более медленных устройствах путем рассылки спама событий касания нижнего листа во время создания макета."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...