小米设备上运行Android 10时,在EditText TextInput中输入电子邮件会导致崩溃

10

最近我在Google Play控制台遇到了一个崩溃问题。

java.lang.NullPointerException:  
  at android.widget.Editor$SelectionModifierCursorController.access$300 (Editor.java:6696) 
  at android.widget.Editor.getEmailPopupWindow (Editor.java:1469) 
  at android.widget.Editor.showEmailPopupWindow (Editor.java:1477) 
  at android.widget.Editor.handleEmailPopup (Editor.java:1456) 
  at android.widget.Editor.updateCursorPosition (Editor.java:2099) 
  at android.widget.TextView.getUpdatedHighlightPath (TextView.java:7813) 
  at android.widget.TextView.onDraw (TextView.java:7998) 
  at android.view.View.draw (View.java:21472) 
  at android.view.View.updateDisplayListIfDirty (View.java:20349) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at androidx.recyclerview.widget.RecyclerView.drawChild (RecyclerView.java:4820) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.draw (View.java:21475) 
  at android.view.View.updateDisplayListIfDirty (View.java:20349) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.draw (View.java:21475) 
  at android.view.View.updateDisplayListIfDirty (View.java:20349) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at androidx.constraintlayout.widget.ConstraintLayout.dispatchDraw (ConstraintLayout.java:2023) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild (CoordinatorLayout.java:1246) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.draw (View.java:21475) 
  at android.view.View.updateDisplayListIfDirty (View.java:20349) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.updateDisplayListIfDirty (View.java:20340) 
  at android.view.View.draw (View.java:21204) 
  at android.view.ViewGroup.drawChild (ViewGroup.java:4412) 
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4171) 
  at android.view.View.draw (View.java:21475) 
  at com.android.internal.policy.DecorView.draw (DecorView.java:830) 
  at android.view.View.updateDisplayListIfDirty (View.java:20349) 
  at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:575) 
  at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:581) 
  at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:654) 
  at android.view.ViewRootImpl.draw (ViewRootImpl.java:3687) 
  at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3482) 
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2819) 
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1782) 
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7785) 
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1031) 
  at android.view.Choreographer.doCallbacks (Choreographer.java:854) 
  at android.view.Choreographer.doFrame (Choreographer.java:789) 
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1016) 
  at android.os.Handler.handleCallback (Handler.java:883) 
  at android.os.Handler.dispatchMessage (Handler.java:100) 
  at android.os.Looper.loop (Looper.java:224) 
  at android.app.ActivityThread.main (ActivityThread.java:7520) 
  at java.lang.reflect.Method.invoke (Method.java) 
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:539) 
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)

设备:Redmi K20 Pro

Android版本:10

我在Android源代码中找不到这部分代码(看起来是小米的修改)

我在React-Native社区发现同样的问题

有什么解决方法吗?

更新:我在完全本机应用程序上遇到了此崩溃,没有任何跨平台框架。


我也是!目前还没有解决方案,而且Facebook已经将此问题标记为已解决。 - Manoj Perumarath
也许这就是他们回答那个问题的地方。 https://xiaomi.eu/community/threads/xiaomi-android-10-crashes-when-typing-in-an-email-address.56363/ - Tobias Reich
我有同样的问题。我还没有找到解决办法... - Vergiliy
3个回答

0

这个崩溃来自于操作系统,实际上,小米制作了一个定制版的安卓系统,在版本10上的修改导致了这个崩溃。有一个解决方案,将caretHidden 标志传递为true值,此问题将消失:

<TextInput
  caretHidden={true}
  ...

我们可以稍微改进一下:

<TextInput
  caretHidden
  ...

0
我找到了一个适用于本地Android开发者的解决方案。我相信你在editText中使用了inputType作为“textEmailAddress”,只需将其更改为以下内容:
android:inputType="textNoSuggestions|textEmailAddress"

0
昨天我也遇到了同样的问题。所以,我花了一些时间才发现,如果在电子邮件输入框中键入一个 . (点),然后清除它,之后再键入电子邮件,应用程序就不会崩溃了。因此,这是另一种解决方法,不需要隐藏插入符号,并且在我的 Redmi 9 上仍然有效。
const [email, setEmail] = useState(".");

useEffect(() => {
  setTimeout(() => {
    setEmail("");
  }, 1);
}, []);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接