在我的Android应用中,我发现大约0.5%的尝试都会发生错误。此错误是从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.
}
以这种方式从Fragment调用方法getIdInfo()
:
(MyActivity)getActivity()).getIdInfo();
我认为这是一种奇怪的行为,因为NullPointerException
告诉mInfo
应该为空。但是onCreate中的条件:
if(mInfo == null)
finish();
应该确保如果mInfo为null,则Activity完成。
哪里可以出错?可以与垃圾收集器行为有关吗?
注意:我无法获得有关错误的更多信息(错误在600次尝试中被检测到3次),因为我已检索到Google Analytics
这种异常形式,这给了我这一行:
NullPointerException (@MyActivity:getIdInfo:122) {main}
答案 0 :(得分:3)
我认为你没有完全创建Activity:一个检测到null并调用finish()。请考虑finish()
不会导致onCreate()
方法停止的事实。
我建议:
mInfo = intent.getParcelableExtra(EXTRA_MESSAGE_INFO);
if(mInfo == null) {
finish();
return;
}
有人可能会怀疑FragmentManager不会尝试将任何片段附加到自身调用finish()的活动,但我无法找到该行为的任何文档。