为什么我不能检查 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() 失败了。