【问题标题】:Why can I not check SharedPreferences reference object is null?为什么我不能检查 SharedPreferences 引用对象是否为空?
【发布时间】:2015-04-21 21:29:02
【问题描述】:

以下是否允许?

SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);

if (prefInfo != null) {
     String savedName = prefInfo.getString("myEmailID", "NO DATA");  
}

看到在做getString() 之前最好先检查SharedPreferencesobject 是否不为空,但我很好奇为什么我不能先检查prefInfo 引用然后获取数据?我讨厌在不明白为什么的情况下修理东西?

我的应用程序崩溃了,第一行出现NullPointerException

SharedPreferences prefInfo = getActivity().getSharedPreferences("LogonData", Context.MODE_PRIVATE);

感谢您的帮助

【问题讨论】:

  • 我认为 getActivity() 返回 null,所以这就是它在第一行崩溃的原因
  • 看起来 getActivity() 为空,这可能表明您做错了什么。您在代码中的哪个位置调用它?
  • @ChrisStratton 我现在看到了我的错误,感谢您的提醒。

标签: android nullpointerexception sharedpreferences


【解决方案1】:

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

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

至于您的特定错误,由于您调用的方法只是返回一个接口,因此您必须在空对象上调用该方法。你的 getActivity() 失败了。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多