android - 如何修复 ViewRoot#updateBidiOptions 中的 NPE?

标签 android exception-handling

在 Android 市场的开发者控制台中,我们得到了很多这样的堆栈跟踪(当我们的应用崩溃时由用户发送):

java.lang.NullPointerException at
android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290) at
android.view.ViewRoot.performTraversals(ViewRoot.java:737) at
android.view.ViewRoot.handleMessage(ViewRoot.java:1792) at
android.os.Handler.dispatchMessage(Handler.java:99) at
android.os.Looper.loop(Looper.java:143) at
android.app.ActivityThread.main(ActivityThread.java:5068) at
java.lang.reflect.Method.invokeNative(Native Method) at
java.lang.reflect.Method.invoke(Method.java:521) at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) at
dalvik.system.NativeStart.main(Native Method)

我们无法重现崩溃,而且当我们检查 Android 源代码时,没有名为 updateBidiOptions 的方法。用户评论似乎表明当他们关注 EditText 时会发生崩溃。许多用户还提到这发生在 HTC Desire HD 上,但它并没有在我们这里的 Desire 上崩溃。

我们如何解决这个问题?

最佳答案

通常,当您在堆栈跟踪中看到不涉及您自己的任何代码的 NPE 时,有时您已将 null 作为参数传递给您不应该传递的 Android 框架。

因此,如果您在代码中有任何地方可能会怀疑是否将 null 作为选项传递,请仔细检查您是否被允许这样做。

否则,此崩溃发生在哪个 Android 版本上?

如果我们有正确的 android.view.ViewRoot.updateBidiOptions(ViewRoot.java:290) 源,我们应该能够看到引用的引用是空引用。然后从那里退后一步,直到我们看到您的来源提供的引用资料(这可能也是空的)。

但是,当我在 Gingerbread 克隆中查看 ViewRoot.java 的源代码时,我什至没有看到 updateBidiOptions() 方法。因此,我需要知道所使用的大致 Android 版本,以便对它可能是哪个引用做出有根据的猜测。

关于android - 如何修复 ViewRoot#updateBidiOptions 中的 NPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536164/

相关文章:

java - 启动独立 SDK 管理器不起作用

android - 添加日期选择器日期的天数

jsp - JSP标记文件: Exception inside of <c:set> results with a blank screen if it is executed inside of a tag file's body stored in a variable

javascript - 在外部脚本文件中捕获 javascript 错误

android - 如何与三星手机上的 BadgeProvider 交互以向应用程序图标添加计数?

android - 如何从android中的特定URL打开pdf

java - setimagebitmap 后 imageview 的高度和 View 搞砸了

c# - 捕获异常、记录并再次抛出异常是好习惯吗?

java - 关闭 ExecutorService

c# - 以编程方式将程序集安装到 GAC