2011-05-01 103 views
6

我的Android应用程序有一些错误报告,它是Activity中的onCreate()中的Nullpointerexception。 失败的代码是getIntent()。getExtras()。getStringExtra(“name”)。(Nullpointerexception)getExtras(name).getString和getIntent()。getStringExtra(name)之间的区别

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

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

我用getIntent()。getStringExtra()替换了代码。除了它不会抛出nullpointerexception之外,还有什么区别,但仍然会将String设置为null。还有其他的区别吗?

什么可能导致它?

回答

0

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

通过罗曼盖伊说明如下: http://groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7

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

8

如果没有附加内容,Intent.getStringExtra()将返回null。 Intent.getExtras()返回null,如果没有额外的,所以你需要在尝试调用getString()或其他方法之前检查它。

+0

是的,但它如何发生getExtras有时(很少)空?我每次都在我的代码中设置额外功能。 – 2011-05-01 23:58:33

+0

你确定吗?你看到logcat中有“额外”吗?你确定知道你的特定活动是如何被调用的? – EboMike 2011-05-02 07:25:05

+0

如果它返回null,无论出于何种原因,都没有额外的内容。我们看不到你的代码,但最可能的答案是你的代码允许没有额外的地方。 – hackbod 2011-05-02 17:44:31

0

getIntent.getExtras()在某个点返回null。 getIntent()。getStringExtra()最有可能编码为检查null extras,并在getExtras()为null时返回null。所谓的 “不投”体系结构。如果是这样,这是有效的运行时执行,不会抛出异常。对null extras调用getStringExtra不是有效的运行时执行,应该抛出异常。

看来有一个getExtras()为空的路径,所以你可以通过检查一个null extras来解决这个问题。

相关问题