I am receiving error reports in Crashlytics for NPEs in SpannableStringInternal but could not reproduce the issue on any phone or determine the source of it. I'm calling for the Internet to help me identify the underlying issue.
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at android.text.SpannableStringInternal.hashCode(SpannableStringInternal.java:480)
at android.text.SpannedString.hashCode(SpannedString.java)
at java.util.Objects.hashCode(Objects.java:98)
at android.view.inputmethod.CursorAnchorInfo.<init>(CursorAnchorInfo.java:435)
at android.view.inputmethod.CursorAnchorInfo.<init>(CursorAnchorInfo.java)
at android.view.inputmethod.CursorAnchorInfo$Builder.build(CursorAnchorInfo.java:391)
at android.widget.Editor$CursorAnchorInfoNotifier.updatePosition(Editor.java:4390)
at android.widget.Editor$PositionListener.onPreDraw(Editor.java:3250)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1013)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2492)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1509)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7051)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:927)
at android.view.Choreographer.doCallbacks(Choreographer.java:702)
at android.view.Choreographer.doFrame(Choreographer.java:638)
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:6692)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
From the source it looks like that somehow the cursor/selection is causing null Spans to be set.