为什么我不能检查 SharedPreferences 引用对象是否为空?
Why can I not check SharedPreferences reference object is null?
是否允许以下内容?
SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);
if (prefInfo != null) {
String savedName = prefInfo.getString("myEmailID", "NO DATA");
}
看到最好先检查SharedPreferences
对象是否不为空再做getString()
,但我很好奇为什么我不能先检查prefInfo
引用然后得到数据 ?我讨厌在不明白为什么的情况下修理东西?
我的应用程序崩溃,第一行 NullPointerException
SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);
感谢帮助
getSharedPreferences()
将始终 return a SharedPreference
与第一个字符串参数的关联名称。它永远不会 return null
您肯定会从 getActivity()
获得 null
,这就是您获得 NullPointerException
的原因。您是calling/executing这个代码块来自哪个fragment的回调方法?
之所以要您获取字符串然后检查是否为空,是因为 SharedPreferences 是一个用于访问首选项数据的接口,而不是 class 保存数据本身。因此,SharedPreferences 只是您访问可用数据的一种方式。它不保证此类数据实际存在。
http://developer.android.com/reference/android/content/SharedPreferences.html
至于您的特定错误,因为您调用的方法只是返回一个接口,所以您必须在空对象上调用该方法。你的 getActivity() 失败了。
是否允许以下内容?
SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);
if (prefInfo != null) {
String savedName = prefInfo.getString("myEmailID", "NO DATA");
}
看到最好先检查SharedPreferences
对象是否不为空再做getString()
,但我很好奇为什么我不能先检查prefInfo
引用然后得到数据 ?我讨厌在不明白为什么的情况下修理东西?
我的应用程序崩溃,第一行 NullPointerException
SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);
感谢帮助
getSharedPreferences()
将始终 return a SharedPreference
与第一个字符串参数的关联名称。它永远不会 return null
您肯定会从 getActivity()
获得 null
,这就是您获得 NullPointerException
的原因。您是calling/executing这个代码块来自哪个fragment的回调方法?
之所以要您获取字符串然后检查是否为空,是因为 SharedPreferences 是一个用于访问首选项数据的接口,而不是 class 保存数据本身。因此,SharedPreferences 只是您访问可用数据的一种方式。它不保证此类数据实际存在。
http://developer.android.com/reference/android/content/SharedPreferences.html
至于您的特定错误,因为您调用的方法只是返回一个接口,所以您必须在空对象上调用该方法。你的 getActivity() 失败了。