Android getIntent().getExtras()在API级别21中有时为null?

Android getIntent().getExtras()在API级别21中有时为null?,android,android-intent,Android,Android Intent,根据我的应用程序的谷歌崩溃报告,我看到了NullPointerException, “尝试在空对象引用上调用虚拟方法intandroid.os.Bundle.getInt(java.lang.String)”,但我已经确保并交叉检查了该活动的意图始终设置了一些额外内容。有人能告诉我可能有什么问题吗?我怀疑没有重写onNewIntent导致了问题,但我的活动是使用“noHistory=true”标志启动的,因此从不调用onNewIntent @Override protected void onC

根据我的应用程序的谷歌崩溃报告,我看到了NullPointerException, “尝试在空对象引用上调用虚拟方法
intandroid.os.Bundle.getInt(java.lang.String)
”,但我已经确保并交叉检查了该活动的意图始终设置了一些额外内容。有人能告诉我可能有什么问题吗?我怀疑没有重写onNewIntent导致了问题,但我的活动是使用“
noHistory=true
”标志启动的,因此从不调用
onNewIntent

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.custom_alert_dialog);
    mBackToMain = false;
    mDoExit = false;
    int stringMessageId = getIntent().getExtras().getInt(name);
    String stringMessage = getIntent().getExtras().getString(fullName);
    initFields(name,fullName);
}




@Override
protected void onNewIntent(Intent intent)
{
    mLog.d("WarningActivity","on new Intent triggered "+ intent.getExtras());
    super.onNewIntent(intent);
    int stringMessageId = getIntent().getExtras().getInt(name);
    String stringMessage = getIntent().getExtras().getString(fullName);
    initFields(name,fullName);
}

您可能正在纠正附加值,但其他地方出现了问题,因此请确保附加值不为空,请先检查它,如下所示:

Intent intent = getIntent();
Bundle extras = intent.getExtras();
if(extras != null) {
    if(extras.containsKey("your key here")) {
        int x = extras.getInt("your key here");
    }
    else {
        Log.d("extras", "No Key");
    }
} else {
    Log.d("extras", "Null Extras");
}

然后检查您的logcat,您应该了解实际情况

请提及oncreate和OnNewIntent的一些代码,您从intent获取数据。
intent.getExtras()
在任何平台上都可能为空。这就是为什么你要使用
Intent.get*Extra(字符串键,*ifNotFound)
方法。嗨,Eugen,谢谢你的评论。问题出在我的项目中,Intent是从100多个地方触发的,有很多额外的,如果不使用bundle,它会变得很重。你有什么解决办法吗?嗨,Mohamed,谢谢你的回答,但是设置空检查将隐藏问题,这不是理想的解决方案,而且在许多地方都会触发相同的意图。为什么空检查会隐藏问题?这里的想法是,如果你把这个逻辑放在上面,你就会知道是什么导致了问题,也就是说,你会在logcat中找到“No Key”消息,然后你就知道额外的东西根本不在那里@沙巴里什