【问题标题】:Difference between getExtras(name).getString and getIntent().getStringExtra(name)getExtras(name).getString 和 getIntent().getStringExtra(name) 之间的区别
【发布时间】:2011-05-01 21:46:13
【问题描述】:

我的 Android 应用程序有一些错误报告,它是 Activity 中 onCreate() 中的 Nullpointerexception。 失败的代码是getIntent().getExtras().getStringExtra("name")。(Nullpointerexception)

这意味着 getExtras() 不知何故为空。我确信我在创建意图的每个地方都设置了额外的意图。我无法在设备上的模拟器上重新创建它。我认为它在我尝试再次打开应用程序后发生在我的真实设备上(但不是在我调试时),同时 Android 可能会终止该进程并再次重新创建活动。但即使在这种情况下,不应该保留额外的意图吗?

我试图杀死模拟器上的进程,再次调用 onCreate 并且 getExtras() 返回了正确的值。

我用 getIntent().getStringExtra() 替换了代码。除了它不会抛出空指针异常但仍将字符串设置为空之外,有什么区别。还有其他区别吗?

可能是什么原因造成的?

【问题讨论】:

    标签: android android-intent nullpointerexception bundle oncreate


    【解决方案1】:

    如果没有额外内容,Intent.getStringExtra() 将返回 null。如果没有额外内容,Intent.getExtras() 将返回 null,因此您需要在尝试调用 getString() 或其他方法之前对其进行检查。

    【讨论】:

    • 是的,但是 getExtras 有时(很少)怎么会为空呢?我每次都在我的代码中设置额外内容。
    • 你确定吗?您在 logcat 中看到“有附加功能”吗?您确定您的特定活动是如何被调用的吗?
    • 如果它返回 null,无论出于何种原因,都没有额外内容。我们看不到您的代码,但最有可能的答案是您的代码允许没有额外的地方。
    • 好的,我会将其标记为已回答。但我仍然认为有问题,而不是代码本身 - 它只是一个 Activity,从另一个 Activity 打开并且总是带有额外内容。我记得它曾经失败过,我在很长一段时间后切换到另一个应用程序我返回我的活动并导致错误。 onCreate 再次被调用,但没有找到额外的东西(在我切换到另一个应用程序之前有额外的同一个活动上!)
    【解决方案2】:

    getIntent.getExtras() 在某些时候返回 null。 getIntent().getStringExtra() 很可能被编码为检查 null extras 并在 getExtras() 为 null 时返回 null。所谓 “无投掷”架构。如果是这样,这是有效的运行时执行,不会引发异常。在 null extras 上调用 getStringExtra 不是有效的运行时执行,应该引发异常。

    似乎有一条 getExtras() 为空的路径,因此您可以通过检查空附加值来解决此问题。

    【讨论】:

      【解决方案3】:

      我发现我在代码的其他地方创建了快捷方式意图,其中包含额外的 String[]。 Android HOME(可能还有系统的其他部分)不支持字符串数组,只支持原始附加内容(int、string、long、float...)。 但是导致问题的代码没有使用快捷方式,它只是一个简单的活动,它额外接收一个字符串数组。也许空的额外内容也是由这个问题引起的 - 应用程序被操作系统杀死并且无法存储额外内容。 在这种情况下,Android 不会抛出异常。

      由 Romain Guy 描述: http://groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7

      我在这里问了一个更具体的问题: Shortcut intent extras lost after restart?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        相关资源
        最近更新 更多