为什么我不能检查SharedPreferences引用对象是否为空?

时间:2015-04-21 21:29:03

标签: android nullpointerexception sharedpreferences

是否允许以下​​内容?

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);

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

getSharedPreferences()将始终返回SharedPreference,其关联名称为第一个字符串参数。它将永远不会返回null

您肯定会从null获得getActivity(),这就是您获得NullPointerException的原因。从哪个片段的回调方法,你正在调用/执行这个代码块?

答案 1 :(得分:0)

您被告知获取字符串然后检查null的原因是SharedPreferences是用于访问首选项数据的接口,而不是保存数据本身的类。因此,SharedPreferences只是一种可以访问数据的方法。它并不保证这些数据实际存在。

http://developer.android.com/reference/android/content/SharedPreferences.html

至于您的特定错误,因为您正在调用刚刚返回接口的方法,您必须在空对象上调用该方法。你的getActivity()失败了。