我做了一个应用程序,她的主要目的是保存某种信息(现在哪个信息不重要),在我的应用程序中,我做了一个名为sp的< code>SharedPreferences对象和一个< code>SharedPreferences。编辑器调用编辑器的对象。
在我的on创建()
方法中,我检索存储的HashSet,如下所示:
Set<String> setFull = sp.getStringSet("SET_FULL", new HashSet<String>());
如果它是null,我得到一个新的HashSet(第一次使用),以及我需要存储的所有信息Im作为不同的字符串存储到其中。
我需要这一套能被我所有的活动所接受,所以我使用:
SharedPreferences.Editor editor = sp.edit();
editor.putStringSet("SET_FULL", setFull);
editor.apply(); //also tried .commit()
在每个活动中,我需要该集合,因此我将其检索为上面的示例。
在主活动(我在HashSet上进行所有操作的活动)上,当活动打开并处于活动状态时,我可以将其添加到HashSet和我的SharedPreferences
项中,并编辑它和所有内容,当我在活动之间移动时,我能看到它和我添加的所有内容,一切都很好,但一旦我关闭应用程序(从模拟器/手机/android工作室),重新打开它,所有数据都被删除了,我需要重新添加所有内容。
我尝试以 4 种不同的方式将集合存储回我的编辑器中:
1:在我的onCreate()
方法中:
editor.putStringSet("SET_FULL", setFull);
editor.apply(); //also tried .commit()
2: 在我的主活动中重写方法onDestroy()
:
@Override
protected void onDestroy() {
super.onDestroy();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}
3: 在我的主活动中重写方法onPause()
:
@Override
protected void onPause() {
super.onPause();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}
4:在我的主要活动中覆盖方法onOP()
:
@Override
protected void onStop() {
super.onStop();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}
我还尝试在我的主要活动中将所有 4 个选项(也只尝试了 2 或 3 个等)一个接一个地放在一起,但这似乎也不起作用。
我也试着在。将()提交给。apply()(在我的< code>SharedPreferences上。编辑器对象,当我使用< code >时。将StringSet(",set)放在上面)但是两者都给出了相同问题,不多不少。
我没有收到任何错误,也没有警告或问题(没有崩溃没有任何东西),一旦应用程序关闭,无论哪种方式,它似乎都会删除所有内容。在过去的一周里,我一直在寻找解决方案,还问了朋友(他们建议与互联网相同,这是压倒一切的方法),但似乎没有一个有效,但是我读到或我问的任何地方都告诉我,即使在我的应用程序关闭后,SharedPreferences对象也应该保留我存储的数据。
这两个解决方案是:第一个是基于@Henry的答案:而不是操作HashSet,我从共享首选对象中获得,复制它(对象本身,而不是引用),就像这样:
Set<String> newSet = new HashSet(setFull);
第二个是在每次我再次将东西放入SharedPre的对象之前,添加以下命令:
editor.clear();
这解决了我的整个问题,它在应用程序关闭后将数据保存在SharedPreferences中。
感谢所有帮助过我的人!
我正在创建一个番茄工作计时器应用程序。它有2项活动: 主要活动是设置时间 我已经创建了一个对象,它保存了设置的时间,我希望这些时间显示在Recents活动中的按钮中。但是,似乎没有保存数据,而是显示了包名称。
我正在尝试将Firebase DataSnapshot对象保存到SharedReferences。 请看这篇文章,我在其中设计了一种方法来实现这一点。 ... 到目前为止,我已经尝试了: > 使用Gson。Json方法。结果:似乎不起作用。。。我不认为DataSnapshot类是“POJO”类型的类。。。至少没有一个能与gson合作。 使用此方法: 私有静态字符串toString(可序列化o)引发
你好,我正在尝试保存一个共享首选项的主题。当用户点击某个主题的按钮时,我希望该主题被设置为默认并保存,所以当他们重新打开应用程序时,它仍然是那个新主题。
我正在向SharedPreference添加一个集合。这是来自另一个类的静态集,该类处理一些数据并将其存储在该集中。 然后我转到另一个活动(订单活动),在那里我显示了这组信息。第一次访问共享偏好时,我能够获得正确的详细信息。例如name1、name2、name3。 然后,我离开此活动,返回到另一个活动,添加另一个名称,然后再次返回到此 Order 活动。我希望这次得到名称1,名称2,名称3,名称4
我已经在这里寻找答案,但没有一个适用于我的具体情况。我有一个数组列表 用户可以通过与应用程序交互向其中添加条目。我知道SharedReferences不适用于对象,我无法让gson工作。 我想保存的数组列表在on暂停,并寻找一个预先存在的保存列表在on创建。这是正确的做法吗? 编辑:我应该澄清,每个条目由两个字符串组成。这是obj构造函数: 所以每个条目基本上是这样的:
以下是我的主要活动 这是我的作品 下面是我的activity_main.xml 和主要活动 现在调试器输出 很明显,即使我稍微调整一下,它也不能正常工作。接下来是:使用共享首选项保存android主题