2017-11-29 74 views
5

Otrzymuję raporty o błędach w Crashlytics dla NPE w SpannableStringInternal, ale nie mogę odtworzyć problemu na żadnym telefonie ani określić jego źródła. Wzywam Internet, aby pomógł mi zidentyfikować podstawowy problem.Android.widget.Editor: NullPointerException w SpannableStringInternal

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) 

Ze źródła wygląda na to, że kursor/wybór powoduje ustawienie zerowych zakresów.

Błąd występuje tylko na Androidzie 7: Crashlytics device info

+4

Chyba nie będziemy bardzo pomocni, jeśli nie podasz nam przykładowego kodu. – Al0x

+2

@ Al0x Mogę umieścić tutaj cały kod aplikacji i zarówno ty, jak i ja nie będziemy mądrzejsi. Aplikacja zawiera ponad 50 "EditText" ze zmiennym zachowaniem. Nie mam pojęcia, kiedy i gdzie nastąpi awaria, dlatego nie można opublikować żadnego powiązanego kodu. – Mannaz

+1

To jest trudne. W 'Build' dla' CursorAnchorInfo' widzę, że nie jest bezpieczny dla wątków. (Zobacz [tutaj] (https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/view/inputmethod/CursorAnchorInfo.java#L255)). Czy manipulujesz rozpiętościami między wątkami? – Cheticamp

Odpowiedz

0

W obliczu tego samego problemu. W moim przypadku było to spowodowane analizatorem składni tekstu w formacie tekstowym , który ustawiał null rozpiętości podczas analizowania html do spannable. Oto dla niego fix.

Sprawdź, gdzie otrzymujesz CharSequence, który jest ustawiony na EditText, jest bardzo prawdopodobne, że gdzieś tam zostanie ustawiony zerowy zakres. W moim przypadku nie był to kursor ani wybór, który ustawił te przęsła.

Powiązane problemy