Android:无法读取SharedReferences

Android:无法读取SharedReferences,android,sharedpreferences,preferences,shared,Android,Sharedpreferences,Preferences,Shared,所以我有一个小问题。我有一种感觉,那是一件我必须忽略的简单事情。在我的第二个片段中,我给SharedReferences写了一定数量的键并应用了后记。在我将数据写入SharedReferences之后,我将当前的Fragment2替换为home Fragment1。加载这个片段后,我调用readPreferences,它应该读取之前存储的数据,并将数据写入主片段上的各种文本视图。这种情况不会发生。我现在不确定是因为写错误还是读错误。我们一如既往地感谢你的帮助。谢谢 第二段 在SharedRefe

所以我有一个小问题。我有一种感觉,那是一件我必须忽略的简单事情。在我的第二个片段中,我给SharedReferences写了一定数量的键并应用了后记。在我将数据写入SharedReferences之后,我将当前的Fragment2替换为home Fragment1。加载这个片段后,我调用readPreferences,它应该读取之前存储的数据,并将数据写入主片段上的各种文本视图。这种情况不会发生。我现在不确定是因为写错误还是读错误。我们一如既往地感谢你的帮助。谢谢

第二段

在SharedReferences上保存字符串时,请确保未保存null。它将清除首选项

prefEditor.putString(alarmOccuranceKey, occurance);

确保occurance不为null。

请使用commit保存数据。您还可以为SharedReference创建一个简单的可重用类。请参阅我的定制课程,了解相同的内容:

根据其中一个答案中的注释,您似乎已经应用了解决方案。但是,根据您在此处发布的代码,问题在于:

您没有从同一个SharedReferences文件中存储和检索值。存储值时,使用的是一个名为SharedReferences的自定义文件。当您尝试检索这些值时,您引用的是特定于承载第二个片段的活动的SharedReferences文件。在某种程度上,它实际上也是自定义命名的…框架基于您的活动名称

在第二个片段中将值写入SharedReferences时,调用:

sharedPreferences = getActivity().getSharedPreferences(alarmPreferences, Context.MODE_PRIVATE);
//...
prefEditor = sharedPreferences.edit();
sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
当您尝试读取HomeFragment中的这些值时,调用:

sharedPreferences = getActivity().getSharedPreferences(alarmPreferences, Context.MODE_PRIVATE);
//...
prefEditor = sharedPreferences.edit();
sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
这两个代码段不引用同一个SharePreferences文件。最直接的解决方案是更新HomeFragment中的代码,以便获得与存储值相同的SharePreferences文件,如下所示:

sharedPreferences = getActivity().getSharedPreferences(alarmPreferences, Context.MODE_PRIVATE);

你试过使用提交而不是应用吗?是的,我试过了。两者都用。我会用commit再试一次,然后读取它返回的布尔值,如果它不能成功写入值,则返回的布尔值将为false,然后从那里开始工作。您是否确保也使用相同的SharedReferences文件?请修改您的问题,使其包含一个至少显示在这两种情况下您是如何初始化SharedReferences引用的。当我将值传递给saveData时,我首先通过输入验证传递它们。请确保没有任何值为null。好的,谢谢。我以前使用过提交,但它仍然不起作用。我会再试一次,看看能不能找到什么地方。谢谢。你可以很容易地使用我在我的链接中提到的类,并直接使用它。这将节省你以后在舞台上的大部分时间。所以它工作得完美无缺,这让我相信,也许是因为我没有把“事后承诺”称为关键?不管怎样,先生,你是个魔术师兄弟