空指针异常:TextInputLayout 在搭载安卓10的小米设备上发生。

huangapple go评论116阅读模式
英文:

NullPointerException in TextInputLayout on Xiaomi with Android 10

问题

最近我在我的安卓应用中开始使用 TextInputLayout。之后,奇怪的 NullPointerException 错误开始出现。这些错误只在搭载 Android 10小米(Xiaomi) 设备上发生。

  1. 致命异常: java.lang.NullPointerException
  2. 尝试调用空对象引用上的直接方法 'void android.widget.Editor$SelectionModifierCursorController.initDrawables()'
  3. android.widget.Editor$SelectionModifierCursorController.access$300

没有办法重现这个错误(我没有小米设备)。在搜索互联网时,我意识到这个错误发生在尝试在 TextInputLayout 字段中输入电子邮件时。

互联网上有React Native的解决方案:https://github.com/facebook/react-native/issues/27204

不幸的是,我还没有找到Java的解决方案。

来自Crashlytics的截图:

空指针异常:TextInputLayout 在搭载安卓10的小米设备上发生。

完整报告:

  1. android.widget.Editor$SelectionModifierCursorController.access$300 (Editor.java:6709)
  2. android.widget.Editor.getEmailPopupWindow (Editor.java:1471)
  3. android.widget.Editor.showEmailPopupWindow (Editor.java:1479)
  4. android.widget.Editor.handleEmailPopup (Editor.java:1458)
  5. android.widget.Editor.updateCursorPosition (Editor.java:2101)
  6. android.widget.TextView.getUpdatedHighlightPath (TextView.java:7823)
  7. android.widget.TextView.onDraw (TextView.java:8008)
  8. android.view.View.draw (View.java:21594)
  9. android.view.View.updateDisplayListIfDirty (View.java:20437)
  10. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  11. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  12. android.view.View.updateDisplayListIfDirty (View.java:20388)
  13. android.view.View.draw (View.java:21312)
  14. android.view.ViewGroup.drawChild (ViewGroup.java:4472)
  15. android.view.ViewGroup.dispatchDraw (ViewGroup.java:4231)
  16. android.view.View.draw (View.java:21601)
  17. com.google.android.material.textfield.TextInputLayout.draw (TextInputLayout.java:3064)
  18. android.view.View.updateDisplayListIfDirty (View.java:20437)
  19. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  20. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  21. android.view.View.updateDisplayListIfDirty (View.java:20388)
  22. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  23. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  24. android.view.View.updateDisplayListIfDirty (View.java:20388)
  25. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  26. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  27. android.view.View.updateDisplayListIfDirty (View.java:20388)
  28. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  29. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  30. android.view.View.updateDisplayListIfDirty (View.java:20388)
  31. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  32. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  33. android.view.View.updateDisplayListIfDirty (View.java:20388)
  34. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  35. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  36. android.view.View.updateDisplayListIfDirty (View.java:20388)
  37. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  38. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  39. android.view.View.updateDisplayListIfDirty (View.java:20388)
  40. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  41. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  42. android.view.View.updateDisplayListIfDirty (View.java:20388)
  43. android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:575)
  44. android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:581)
  45. android.view.ThreadedRenderer.draw (ThreadedRenderer.java:654)
  46. android.view.ViewRootImpl.draw (ViewRootImpl.java:3844)
  47. android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3635)
  48. android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2955)
  49. android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1865)
  50. android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:8029)
  51. android.view.Choreographer$CallbackRecord.run (Choreographer.java:969)
  52. android.view.Choreographer.doCallbacks (Choreographer.java:793)
  53. android.view.Choreographer.doFrame (Choreographer.java:728)
  54. android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:954)
  55. android.os.Handler.handleCallback (Handler.java:883)
  56. android.os.Handler.dispatchMessage (Handler.java:100)
  57. android.os.Looper.loop (Looper.java:224)
  58. android.app.ActivityThread.main (ActivityThread.java:7509)
  59. java.lang.reflect.Method.invoke (Method.java)
  60. com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
  61. com.android.internal.os.ZygoteInit.main (ZygoteInit.java:995)
英文:

I recently started using TextInputLayout in my android app. After that, strange NullPointerException errors started to appear. These errors only occur on Xiaomi devices with Androind 10.

  1. Fatal Exception: java.lang.NullPointerException
  2. Attempt to invoke direct method 'void android.widget.Editor$SelectionModifierCursorController.initDrawables()' on a null object reference
  3. android.widget.Editor$SelectionModifierCursorController.access$300

There is no way to reproduce the error (I do not have a Xiaomi device). Searching the Internet realized that this error occurs when trying to enter email in the TextInputLayout field.

There is a solution for React Native on the internet: https://github.com/facebook/react-native/issues/27204

Unfortunately, I have not been able to find a solution for Java.

Screenshot from Crashlytics:

空指针异常:TextInputLayout 在搭载安卓10的小米设备上发生。

Full report:

  1. android.widget.Editor$SelectionModifierCursorController.access$300 (Editor.java:6709)
  2. android.widget.Editor.getEmailPopupWindow (Editor.java:1471)
  3. android.widget.Editor.showEmailPopupWindow (Editor.java:1479)
  4. android.widget.Editor.handleEmailPopup (Editor.java:1458)
  5. android.widget.Editor.updateCursorPosition (Editor.java:2101)
  6. android.widget.TextView.getUpdatedHighlightPath (TextView.java:7823)
  7. android.widget.TextView.onDraw (TextView.java:8008)
  8. android.view.View.draw (View.java:21594)
  9. android.view.View.updateDisplayListIfDirty (View.java:20437)
  10. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  11. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  12. android.view.View.updateDisplayListIfDirty (View.java:20388)
  13. android.view.View.draw (View.java:21312)
  14. android.view.ViewGroup.drawChild (ViewGroup.java:4472)
  15. android.view.ViewGroup.dispatchDraw (ViewGroup.java:4231)
  16. android.view.View.draw (View.java:21601)
  17. com.google.android.material.textfield.TextInputLayout.draw (TextInputLayout.java:3064)
  18. android.view.View.updateDisplayListIfDirty (View.java:20437)
  19. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  20. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  21. android.view.View.updateDisplayListIfDirty (View.java:20388)
  22. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  23. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  24. android.view.View.updateDisplayListIfDirty (View.java:20388)
  25. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  26. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  27. android.view.View.updateDisplayListIfDirty (View.java:20388)
  28. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  29. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  30. android.view.View.updateDisplayListIfDirty (View.java:20388)
  31. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  32. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  33. android.view.View.updateDisplayListIfDirty (View.java:20388)
  34. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  35. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  36. android.view.View.updateDisplayListIfDirty (View.java:20388)
  37. android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4456)
  38. android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4429)
  39. android.view.View.updateDisplayListIfDirty (View.java:20388)
  40. android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:575)
  41. android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:581)
  42. android.view.ThreadedRenderer.draw (ThreadedRenderer.java:654)
  43. android.view.ViewRootImpl.draw (ViewRootImpl.java:3844)
  44. android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3635)
  45. android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2955)
  46. android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1865)
  47. android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:8029)
  48. android.view.Choreographer$CallbackRecord.run (Choreographer.java:969)
  49. android.view.Choreographer.doCallbacks (Choreographer.java:793)
  50. android.view.Choreographer.doFrame (Choreographer.java:728)
  51. android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:954)
  52. android.os.Handler.handleCallback (Handler.java:883)
  53. android.os.Handler.dispatchMessage (Handler.java:100)
  54. android.os.Looper.loop (Looper.java:224)
  55. android.app.ActivityThread.main (ActivityThread.java:7509)
  56. java.lang.reflect.Method.invoke (Method.java)
  57. com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539)
  58. com.android.internal.os.ZygoteInit.main (ZygoteInit.java:995)

答案1

得分: 1

以下是我为了解决崩溃问题所做的操作。它将在编辑电子邮件地址时禁用光标,但不会导致崩溃。

  1. if (android.os.Build.MANUFACTURER.equals("Xiaomi", ignoreCase = true) &&
  2. android.os.Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.Q) {
  3. editText.isCursorVisible = false;
  4. }
英文:

This is what I did to fix the crash. It will disable the cursor when editing an email address, but it will not crash.

  1. if (android.os.Build.MANUFACTURER.equals("Xiaomi", ignoreCase = true) &&
  2. android.os.Build.VERSION.SDK_INT == android.os.Build.VERSION_CODES.Q) {
  3. editText.isCursorVisible = false
  4. }

huangapple
  • 本文由 发表于 2020年8月24日 17:49:49
  • 转载请务必保留本文链接:https://go.coder-hub.com/63558592.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定