android - 在 onCreate 中获取保存的片段实例时,尝试在空对象引用上调用虚拟方法“int java.util.ArrayList.size()”
问题描述
我创建了一个 Activity 并使用带有 2 个片段的 FragmentStatePagerAdapter。
在 onSaveInstanceState 上,我正在保存两个片段。
@Override
protected void onSaveInstanceState(Bundle outState) {
try {
getSupportFragmentManager().putFragment(outState,
BirthDetailInputFragment.class.getName(),
birthDetailInputFragment);
getSupportFragmentManager().putFragment(outState,
SearchBirthDetailsFragment.class.getName(),
searchBirthDetailsFragment);
} catch (Exception e) {
e.printStackTrace();
}
super.onSaveInstanceState(outState);
}
这样我就可以在 onCreate() 中获取保存的实例,如下所示。
if (savedInstanceState != null) {
try {
birthDetailInputFragment = (BirthDetailInputFragment) getSupportFragmentManager()
.getFragment(savedInstanceState,
BirthDetailInputFragment.class.getName());
searchBirthDetailsFragment = (SearchBirthDetailsFragment) getSupportFragmentManager()
.getFragment(savedInstanceState,
SearchBirthDetailsFragment.class.getName());
} catch (Exception e) {
e.printStackTrace();
}
} else {
searchBirthDetailsFragment = new SearchBirthDetailsFragment();
birthDetailInputFragment = new BirthDetailInputFragment();
}
但是当我改变方向时,它给了我下面的异常 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference in above catch block。
任何指导将不胜感激。
解决方案
将数据保存在 onSaveInstanceState 中。并在 onRestoreInstanceState 中恢复数据 - 而不是 oncreate();
推荐阅读
- javascript - useEffect,覆盖 if 语句
- azure - 如何使用 Get-AzWebApp 命令列出所有自定义域和订阅名称
- uwp-xaml - 我们如何覆盖 Uno.Material 样式的字体系列?
- python - 使用 python ssh 完全进入服务器
- pom.xml - 来自父 POM 的模块 POM 的版本
- python - 如何计算熊猫的中位时间?
- c++ - 在 OpenCV C++ 中使用自定义锚点时,cv::normalizeAnchor) 中的断言失败 (anchor.inside(Rect(0,0,ksize.width,ksize.height)))
- java - 如何发送 base64 格式的大文件?
- nuxt.js - NuxtJS HighCharts Series 数据只更新一次
- spacy - 如何在 spaCy 3.0 中使用 Hugging Face 变压器