Java 活动内奇怪的NullPointerException
在我的Android应用程序中,我发现大约0.5%的尝试都会发生错误。此错误是由Java 活动内奇怪的NullPointerException,java,android,android-fragments,nullpointerexception,garbage-collection,Java,Android,Android Fragments,Nullpointerexception,Garbage Collection,在我的Android应用程序中,我发现大约0.5%的尝试都会发生错误。此错误是由NullPointerException生成的,但这很奇怪 下面总结了生成该异常的代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); mInfo = intent.getParcelableExtra
NullPointerException
生成的,但这很奇怪
下面总结了生成该异常的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
mInfo = intent.getParcelableExtra(EXTRA_MESSAGE_INFO); // mInfo is a private member of Activity
if(mInfo == null)
finish();
setContentView(R.layout.activity_fermata_details);
first = savedInstanceState.getBoolean(IS_FIRST_LOAD, true); // also onSaveInstanceState is used for maintain that value across configuration changes.
if(first){
first = false;
// a new fragment is inflated in the FrameLayout of the Activity
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
DetailsFragment fragment = new DetailsFragment();
transaction.replace(R.id.content_fragment, fragment);
transaction.commit();
}
}
该活动还具有以下公共方法:
public int getIdInfo(){
return mInfo.getId(); // here occurs the NullPointerException.
}
方法getIdInfo()
通过以下方式从片段中调用:
(MyActivity)getActivity()).getIdInfo();
我认为这是一种奇怪的行为,因为NullPointerException
告诉mInfo
应该为null。但是onCreate中的条件:
if(mInfo == null)
finish();
应确保如果mInfo为null,则活动已完成
错误在哪里?是否可能与垃圾收集器行为有关
注意:我无法获得有关错误的更多信息(错误在600次尝试中被检测到3次),因为我检索到了此异常表单谷歌分析
,仅此一行:
NullPointerException (@MyActivity:getIdInfo:122) {main}
我认为您得到的不是完全创建的活动:一个检测到null并调用finish()的活动。请考虑“<代码> FIX())/>代码>不会导致<代码> OnCeCuto()/Case>方法停止。 我建议:
mInfo = intent.getParcelableExtra(EXTRA_MESSAGE_INFO);
if(mInfo == null) {
finish();
return;
}
有人可能会怀疑FragmentManager不会尝试将任何片段附加到自己调用finish()的活动,但我找不到任何关于该行为的文档 我在任何地方都看不到savedInstanceState.setBoolean(是第一次加载还是第一次加载)?为了避免在我的问题中编写大量代码,我省略了它。但正如在评论中所说,我在onSaveInstanceState()回调中使用了它,何时调用(MyActivity)getActivity()).getIdInfo();在片段中?因为它需要访问该信息。片段使用该信息调用ws。ws在任务内被调用代码>崩溃,则
getActivity
为空。你把它称为碎片分离的地方,我想你是对的。使用返回可以确保后续代码不会被执行吗?