gpt4 book ai didi

android - 如何让我的 SharedPreferences 对象在应用程序关闭后保存数据?

转载 作者:行者123 更新时间:2023-11-29 18:27:57 25 4
gpt4 key购买 nike

我做了一个应用程序,她的主要目的是保存某种信息(现在哪些信息不重要),在我的应用程序中我正在制作一个名为 sp 的 SharedPreferences 对象和一个 SharedPreferences.Editor 对象称为编辑器。

在我的 onCreate() 方法中,我检索存储的 HashSet,如下所示:

    Set<String> setFull = sp.getStringSet("SET_FULL", new HashSet<String>());

如果它为空,我会得到一个新的 HashSet(第一次使用时),并且我需要存储的所有信息都将作为不同的字符串存储到其中。

我需要这个 Set 在我的所有 Activity 中都可以接受,所以我使用:

   SharedPreferences.Editor editor = sp.edit();
editor.putStringSet("SET_FULL", setFull);
editor.apply(); //also tried .commit()

在每个 Activity 中我都需要那个集合,所以我像上面的例子一样检索它。

关于主要 Activity (我对 HashSet 进行所有操作的 Activity ),当 Activity 打开并处于 Activity 状态时,我可以添加到该 HashSet 和我的 SharedPreferences 项目并编辑它和所有内容,当我在我的 Activity 之间移动时,我可以看到它以及我添加的所有内容并且一切都是很好,但是一旦我关闭我的应用程序(从我的模拟器/手机/android studio),当我重新打开它时,所有数据都会被删除,我需要重新添加所有内容。

我尝试以 4 种不同的方式将集合存储回我的编辑器:

1: 在我的 onCreate() 方法中:

   editor.putStringSet("SET_FULL", setFull);
editor.apply(); //also tried .commit()

2:在我的主要 Activity 中重写方法 onDestroy():

@Override
protected void onDestroy() {
super.onDestroy();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}

3: 在我的主要 Activity 中覆盖方法 onPause():

@Override
protected void onPause() {
super.onPause();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}

4: 在我的主要 Activity 中覆盖方法 onStop():

@Override
protected void onStop() {
super.onStop();
editor.putStringSet("SET_FULL", setFull);
editor.apply();
}

我还尝试在我的主要 Activity 中将所有 4 个选项(也只尝试了 2 个或 3 个等等)一个接一个地放在一起,但这似乎也没有用。

我还尝试在 .commit() 和 .apply() 之间交换(在我的 SharedPreferences.Editor 对象上,当我使用 .putStringSet("", set)在上面)但两者都给出了同样的问题,不多也不少。

我没有收到任何错误,也没有警告或问题(没有崩溃,什么都没有),无论以何种方式关闭应用程序,它似乎都会删除所有内容。过去一周我一直在寻找解决方案,也问过 friend (他们建议与互联网相同,这是最重要的方法)但似乎没有一个有效,但无论我在哪里阅读或我问每个人都告诉我 SharedPreferences即使在我的应用程序关闭后,对象也应该保留我存储的数据。

最佳答案

如文档中所述:

Note that you must not modify the set instance returned by this call. The consistency of the stored data is not guaranteed if you do, nor is your ability to modify the instance at all.

所以请确保不要更改 Set<String>你从getStringSet()回来方法。如果你这样做,会发生奇怪的事情。

关于android - 如何让我的 SharedPreferences 对象在应用程序关闭后保存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com