【问题标题】:java.lang.NullPointerException with Nougat带有牛轧糖的 java.lang.NullPointerException
【发布时间】:2017-03-21 11:59:54
【问题描述】:

我的应用程序在各种 Android 版本中运行良好。我有用户在 Android 4.3、5.0、5.1 和 6.0 上运行它,没有任何问题。但是,使用 S7 Edge 的用户刚刚更新了 Android 7.0,当将文本粘贴到 EditText 字段时应用程序崩溃(这是您使用此应用程序所做的第一件事也是唯一的事情 - 它开始您将文本粘贴到一个框中,然后然后应用程序解析文本)。

我查看了许多关于 Null Pointer Exceptions 的线程,并且查看了 Editor.java 的源代码,但没有什么是显而易见的。下面的堆栈跟踪显示我的代码没有问题。有什么想法他们对 7.0 所做的更改可能会导致这种情况吗?

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.Editor$SelectionModifierCursorController.isDragAcceleratorActive()' on a null object reference
at android.widget.Editor.updateFloatingToolbarVisibility(Editor.java:1520)
at android.widget.Editor.onTouchEvent(Editor.java:1475)
at android.widget.TextView.onTouchEvent(TextView.java:10024)
at android.view.View.dispatchTouchEvent(View.java:10725)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.widget.ScrollView.dispatchTouchEvent(ScrollView.java:738)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2865)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2550)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:505)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1863)
at android.app.Activity.dispatchTouchEvent(Activity.java:3226)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:467)
at android.view.View.dispatchPointerEvent(View.java:10954)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:5051)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4908)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4439)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4492)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4458)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4591)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4466)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4648)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4439)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4492)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4458)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4466)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4439)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6936)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6875)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6836)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:7046)
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:7010)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:7073)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:632)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:913)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

【问题讨论】:

  • 看起来这是一个已知问题:code.google.com/p/android/issues/detail?id=228485
  • 不完全一样的方法崩溃,但这部分有用,因为它不是我的应用程序。但是我想知道如何解决它。正如我所说,虽然我的应用在粘贴文本时没有做任何事情:-(
  • @Gavin:引用的错误和您的崩溃来自三星设备。您能否在模拟器或非三星 Android 7.0+ 环境中重现您的问题?
  • @CommonsWare 我没有机会在模拟器中进行适当的实验。我确实在仪表板中看到其他一些用户使用的是 Android 7,但目前我只有一个用户遇到了这个问题,他们建议升级到 Nougat 后问题就开始了。

标签: nullpointerexception samsung-mobile android-7.0-nougat


【解决方案1】:

我通过删除解决了它

MyEditText.setMovementMethod(new ScrollingMovementMethod());

【讨论】:

  • 谢谢。我用它来滚动,这个解决方案对我有用。
【解决方案2】:

这是您阻止复制粘贴菜单以任何方式、形状或形式出现的方式。这个错误真的让我发疯了,就像任何三星错误一样,你知道它在他们的代码中,但你也知道他们不会很快修复它。无论如何,这是奇迹墙......

  1. 检查是否为 Android.Build.Model.toLowerCase().startsWith('sm-g930')。不要匹配整个字符串,最后一个字母是次要版本标识符。我将此布尔值存储在稍后出现的 shouldBlockCopyPaste 变量中。

  2. 如果匹配,您希望阻止显示复制粘贴菜单。这就是你实际做的方式!!!

重写这两个函数,你会注意到我的 shouldBlockCopyPaste 布尔值,这样其他设备就不会被阻止。

   @Override
   public ActionMode StartActionMode (ActionMode.Callback callback){
      if (shouldBlockCopyPaste) {
        return null;
      } else {
        return super.StartActionMode(callback);
      }
    }

   @Override
   public ActionMode StartActionMode (ActionMode.Callback callback, int type){
      if (shouldBlockCopyPaste) {
        return null;
      } else {
        return super.StartActionMode(callback, type);
      }
    }

【讨论】:

  • 此解决方案无效。它对你有用吗?您还有其他建议的解决方案吗?
【解决方案3】:

我在来自三星设备的应用程序中看到此崩溃已经有一段时间了。事实证明,长按 TextView 会在这些设备上调出复制粘贴菜单,用户甚至可以粘贴文本(尽管它不是 EditText 组件)。最终禁用了罪魁祸首 TextViews(最重要的是 longClickable)的 XML 中的所有类型的交互,并且崩溃并没有消失。

 <TextView
...
    android:longClickable="false"
    android:clickable="false"
    android:linksClickable="false" />

【讨论】:

  • 一位用户刚刚向我报告说,在他的 S8 上更新奥利奥后,此问题已消失。仅供参考。
猜你喜欢
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
相关资源
最近更新 更多