我的Android应用程序上有一些错误报告,它是Activity中onCreate()中的Nullpointerexception。
失败的代码是getIntent()。getExtras()。getStringExtra(" name")。 (空指针异常)
这意味着getExtras()以某种方式为null。我确信我会在创建意图的每个位置上额外设置意图。我无法在设备上的仿真器上重新创建它。我认为这是在我尝试再次打开该应用程序后在我的真实设备上发生的(但不是在调试时发生),与此同时,Android可能终止了该进程并再次创建了活动。但是,即使在这种情况下,也不应该保留意图的附加功能吗?
我试图杀死模拟器上的进程,再次调用onCreate,并且getExtras()返回正确的值。
我用getIntent()。getStringExtra()替换了代码。除了将不会引发nullpointerexception而是将String设置为null之外,还有什么区别。还有其他区别吗?
是什么原因造成的?
如果没有多余内容,则Intent.getStringExtra()返回null。如果没有多余内容,则Intent.getExtras()返回null,因此您需要在尝试调用getString()或其他方法之前进行检查。
是的,但是getExtras有时(很少)为null怎么会发生? 我每次都在代码中设置额外内容。
你确定吗? 您是否在logcat中看到"有其他内容"? 您确定知道您的特定活动是如何被调用的吗?
如果返回null,则无论出于何种原因,都不会有多余内容。 我们看不到您的代码,但最有可能的答案是您的代码允许没有多余内容的地方。
好的,我将其标记为已回答。 但是我仍然认为这是错误的,而不是代码本身-它只是一个Activity,是从另一个Activity打开的,并且总是带有其他内容。 我记得它曾经失败过,很长时间后我又回到活动中,然后切换到另一个应用程序,这导致了错误。 再次调用了onCreate,但没有找到额外功能(在切换到另一个应用程序之前,在具有额外功能的同一活动中!)
我发现在代码的其他地方,我正在创建带有String []的快捷方式。 Android HOME(可能还有系统的其他部分)不允许使用字符串数组,而仅允许使用基本附加功能(int,string,long,float ...)。
但是导致问题的代码并没有使用快捷方式,这只是一个简单的活动,它额外接收了一个字符串数组。也许空的附加组件也是由这个问题引起的-应用程序被OS杀死,附加组件无法存储。
在这种情况下,Android不会引发任何异常。
由Romain Guy在这里描述:
http://groups.google.com/group/android-developers/browse_thread/thread/7f2ce458bd5d112f/189e2b7b2b2532d7
我在这里问了一个更具体的问题:
重新启动后丢失了快捷方式附加功能?
getIntent.getExtras()在某些时候返回null。 getIntent()。getStringExtra()最有可能被编码为检查额外的空值,如果getExtras()为空,则返回null。所谓的
"不扔"架构。如果是这样,则这是有效的运行时执行,并且不会引发异常。在Extra Extra上调用getStringExtra是无效的运行时执行,应该引发异常。
似乎存在一个路径,其中getExtras()为null,因此您可以通过检查null附加项来对此进行编码。