NullPointerException: int android.widget.Editor$SelectionModifierCursorController.getMinTouchOffset()

Это очень странное исключение ОС устройства Xiaomi. Даже если у меня есть журналы, доступные из Fabric, трассировка стека не относится к моему коду.

Подробности сбоя приведены ниже, как сообщается в crashalytics (Fabric),

  • 21 тыс. аварий

  • Все сбои на устройствах Xiaomi

  • Сбои на ОС Android версии 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 с Nougat

Также задан вопрос на официальном форуме Xiaomi http://en.miui.com/forum.php?mod=viewthread&tid=4595164

Пожалуйста, предоставьте любое рабочее решение как можно скорее. Поскольку пользователи не должны быть довольны этими сбоями.

Заранее спасибо.


person Chitrang    schedule 22.11.2018    source источник
comment
Привет! Вы нашли что-то об этой проблеме, пожалуйста?   -  person anthony    schedule 11.04.2019


Ответы (4)


1) Прежде всего, только если требуется, установите один из них.

textView.setMovementMethod(LinkMovementMethod.getInstance());

or 

setAutoLinkMask(Linkify.ALL);

or

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;
    }
});

На устройствах Xiaomi возникла внутренняя проблема сбоя. Если вы сначала переопределите setOnLongClickListener(reference), а затем выполните первый шаг, он будет использовать внутреннюю реализацию, и это продолжит сбой . Поэтому очень важно последовательно выполнять описанные выше шаги.

Я открыт для других решений, однако, следуя этому подходу, я больше не вижу отчетов о сбоях.

person Chitrang    schedule 23.09.2019

Есть ли в вашем приложении пользовательский TextView? Возможно ли изменить размер или имеет дополнительную функциональность?

Скин Xiaomi для Android, вероятно, мешает этому и вызывает сбои. Я предлагаю попробовать долго щелкать все TextView в вашем приложении.

person Jake Lee    schedule 26.11.2018
comment
Я использую ClickableSpan для нескольких текстовых просмотров, и я уже протестировал это, и он не давал сбоев. - person Chitrang; 27.11.2018
comment
Вы используете устройство, указанное в журналах сбоев, и долгое нажатие? - person Jake Lee; 27.11.2018

Это происходит, когда пользователь делает долгий щелчок по всему выделенному тексту. Просто определите longClickListener:

edit_text.setOnLongClickListener {
   doSomething()
   true
}

и позже вы можете удалить его

edit_text.setOnLongClickListener(null)
person mepfic    schedule 20.06.2019

Для меня этот сбой произошел, когда TextView содержал ссылку, а setAutoLinkMask(Linkify.ALL); был вызван для представления. В этом случае Android обрабатывает все клики (включая длинные клики) этим представлением. На устройствах других марок ссылка открывалась после долгого клика, а на устройстве Xiaomi произошел сбой. Кажется, у них немного другая логика обработки onTouchEvent внутри TextView. Я немного поиграл и обнаружил, что установка android:textIsSelectable="false" для TextView в файле макета решает проблему.

Я знаю, что это не масштабируемое решение, но для моего случая оно было идеальным, поэтому я прекратил дальнейшие исследования. Может еще кому подскажет.

person Nobodyhave    schedule 22.08.2019