android.widget.Editor: NullPointerException in SpannableStringInternal
Asked Answered
N

1

6

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.

The error only occurs on Android 7: Crashlytics device info

Noun answered 29/11, 2017 at 14:45 Comment(5)
I guess we won't be of great help if you do not provide us some example code.Prevocalic
@Prevocalic I could post the whole application code here and both you and me would not be any wiser. The application contains over 50 EditText with varying behavior. I have no idea when and where the crash is happening, thus could not post any related code.Noun
This is a tough one. I do see in Build for CursorAnchorInfo that it is not thread safe. (See here). Are you manipulating spans across threads?Meekins
Haven't checked this problem occurs but I found a CursorAnchorInfo related change in android-n-preview-1 to android-7.1.0_r1 AOSP changelog. The title is b7edebc : Fix inefficient CursorAnchorInfo#hashCode() android.googlesource.com/platform/frameworks/base/+/…Owing
This issue ist still happening for us, mainly Samsung Devices with Android 12. We are not setting spans explicitly ...Stratigraphy
C
0

Faced same issue. In my case it was caused by rich text parser lib cwac-richedit witch was setting null spans while parsing html to spannable. Here is fix for it.

Check where do you get CharSequence which is set to EditText, it is very likely that null span is set somewhere there. In my case it wasn't cursor or selection who set those spans.

Closeup answered 6/2, 2018 at 16:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.