7

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

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

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

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

可能是什么原因造成的?

4

3 回答 3

8

Intent.getStringExtra() returns null if there are no extras. Intent.getExtras() returns null if there are no extras, so you need to check for that before trying to call getString() or other methods on it.

于 2011-05-01T23:19:15.690 回答
0

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

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

于 2011-05-01T23:31:58.560 回答
0

我发现在我的代码中的其他地方我正在创建具有额外 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?

于 2011-05-04T21:00:45.043 回答