getExtras(name).getString和getIntent()之间的区别.getStringExtra(name)

时间:2011-05-01 21:46:13

标签: android android-intent nullpointerexception bundle oncreate

我的Android应用程序上有一些错误报告,它是一个活动中onCreate()的Nullpointerexception。 失败的代码是getIntent()。getExtras()。getStringExtra(“name”)。(Nullpointerexception)

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

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

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

可能导致什么原因?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

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

似乎有一个getExtras()为null的路径,因此您可以通过检查null extras来编写此代码。

答案 2 :(得分: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?