android - NullPointerException: int android.widget.Editor$SelectionModifierCursorController.getMinTouchOffset()
问题描述
这是一个非常奇怪的小米设备的操作系统异常。即使我确实有 Fabric 提供的日志,堆栈跟踪也不会引用我的任何代码。
下面是 crashalytics(Fabric) 中报告的崩溃详细信息,
21K 崩溃
小米设备上的所有崩溃
在 Android OS 版本 6、7 和 8 上崩溃
崩溃日志:
# OS Version: 8.1.0
# Device: Redmi Note 5 pro
# RAM Free: 30.1%
# Disk Free: 74.2%
#0. Crashed: main
at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
at android.widget.Editor.performLongClick(Editor.java:1205)
at android.widget.TextView.performLongClick(TextView.java:10908)
at android.view.View.performLongClick(View.java:6360)
at android.view.View$CheckForLongPress.run(View.java:24768)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6606)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
--
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.Editor$SelectionModifierCursorController.getMinTouchOffset()' on a null object reference
at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
at android.widget.Editor.performLongClick(Editor.java:1205)
at android.widget.TextView.performLongClick(TextView.java:10908)
at android.view.View.performLongClick(View.java:6360)
at android.view.View$CheckForLongPress.run(View.java:24768)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6606)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
#0. Crashed: main
at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
at android.widget.Editor.performLongClick(Editor.java:1205)
at android.widget.TextView.performLongClick(TextView.java:10908)
at android.view.View.performLongClick(View.java:6360)
at android.view.View$CheckForLongPress.run(View.java:24768)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6606)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
类似参考:
https://issuetracker.google.com/issues/37127697
带有牛轧糖的 java.lang.NullPointerException
也在小米官方论坛上提问http://en.miui.com/forum.php?mod=viewthread&tid=4595164
请尽快提供任何可行的解决方案。因为用户一定不会对这些崩溃感到满意。
提前致谢。
解决方案
1) 首先,仅在需要时,设置其中之一。
textView.setMovementMethod(LinkMovementMethod.getInstance());
或者
setAutoLinkMask(Linkify.ALL);
或者
Linkify.addLinks(textView, Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES | Linkify.MAP_ADDRESSES);
2)其次,为TextView设置一个长按监听器,它必须返回true。
textView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// do soemthing if needed
return true;
}
});
小米设备存在一些内部崩溃问题。如果您先覆盖 setOnLongClickListener( reference ),然后执行第一步,它将使用内部实现,并且会继续崩溃。因此,按顺序执行上述步骤很重要。
我对其他解决方案持开放态度,但是通过遵循这种方法,我不再看到崩溃报告。
推荐阅读
- javascript - 未捕获的类型错误:d3.arc(...).outerRadius(...).innerRadius(...).text 不是函数
- php - 已解决 - Laravel 6 登录在服务器(Heroku)上没有做任何事情
- python - 与python的组合
- python - Python。无法从文件中导入多个函数
- python - 模块“mysite.asgi”在 Heroku 和 Django 应用程序上没有属性“channel_layer”
- javascript - 是否有可能在通过来自另一个网站的重定向打开的 React 网站中捕获响应?
- java - 执行 ./bin/start-hbase.sh 时出现 Hbase 错误(Windows)
- javascript - 使用 next.js 和 Parse Server 在 getInitialProps 内重定向
- android-accessibility - Android Accessibility 服务实时音频处理
- git - 推送到master时如何自动推送到子树?