java - 处理 toString NullPointException,即使在检查了 !null 之后
问题描述
我经常崩溃
Fatal Exception: java.lang.RuntimeException
Unable to start activity ComponentInfo{com.example.phocast/com.example.phocast.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference
AndroidStudio 也表明Method invocation .toString may produce NullPointException
我的代码是:
public class SunFragment extends Fragment {
ArrayList<Object> sunsList;
Typeface sunfont;
Double Dlat;
Double Dlang;
private AdView mAdView;
//to be called by the MainActivity
public SunFragment() {
// Required empty public constructor
}
private static final String KEY_LOCATION_NAME = "location_name";
public String TAG = "SunFragment";
public String location;//="No location name found";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
location = savedInstanceState.getCharSequence(KEY_LOCATION_NAME).toString();
} else {
location = "";
}
}
既然我已经在检查了savedInstanceState
,我还能检查什么?
解决方案
也许您没有将成功 charSecuence 设置为 bundle。
应该是这样的:
@Override
protected void onSaveInstanceState(final Bundle outState) {
super.onSaveInstanceState(outState);
outState.putCharSequence(KEY_LOCATION_NAME, location);
}
如果你实现protected void onSaveInstanceState(final Bundle outState, PersistableBundle outPersistentState)
它的另一种方法,请小心!
推荐阅读
- spring-boot - 500错误的Spring Boot自定义逻辑
- javascript - 如何在 Jquery 中选择具有单个类名的元素?
- sql - 存储以前的多对多关系
- javascript - 如何在 Atom 编辑器中修复“运行 JSHint 包时出错”
- gradle - 如何从 SourceSets 中排除具体文件
- node.js - 如果您不是专家,不建议使用 npm audit --force。那该怎么办?我的生产应用程序不安全吗?
- racket - 查找列表的最小值和最大值
- python - 从嵌套的dict python中获取数据并且数据类型也是混合的
- django - 如何使用一种形式将数据保存到多个模型?
- python - 检查列表中特定元素的元素值