当前位置: 首页 > 知识库问答 >
问题:

应用程序关闭后,如何保存自定义对象的ArrayList?

蒋英博
2023-03-14

我已经在这里寻找答案,但没有一个适用于我的具体情况。我有一个数组列表

ArrayList<GridItem> gridItems = new ArrayList<>();

用户可以通过与应用程序交互向其中添加条目。我知道SharedReferences不适用于对象,我无法让gson工作。

我想保存的数组列表在on暂停,并寻找一个预先存在的保存列表在on创建。这是正确的做法吗?

编辑:我应该澄清,每个条目由两个字符串组成。这是obj构造函数:

public GridItem(String Name, String Path){
        mName = Name;
        mPath = Path;
    }

所以每个条目基本上是这样的:

gridItems.add("a name", "/sdcard/emulated etc etc")

共有3个答案

上官飞
2023-03-14

所以我设法让它工作,这是一个混合了很多代码。首先,在onCreate中,我初始化了ArrayList,如果有一些数据需要恢复,它就会执行该操作,否则它会创建一个empy ArrayList。

In onCreate
    // Create an ArrayList of GridItem objects
            gridItems = new ArrayList<>(); // Now gridItems = []


            SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
            Gson gson = new Gson();
            String json = sharedPrefs.getString(TAG2, null); //Retrieve previously saved data
            if (json != null) { 
                Type type = new TypeToken<ArrayList<GridItem>>() {}.getType();
                gridItems = gson.fromJson(json, type); //Restore previous data
            }
    //Initialize the view
    //NOTE if you pass a null ArrayList<GridItem> the app will crash 
            gridAdapter = new GridItemAdapter(this, gridItems); 
//etc etc

在暂停我采取的ArrayList实际上存在于屏幕上,并把它在json形式。然后我保存这个json值并用它来创建

暂停

//Set the values
        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
        SharedPreferences.Editor editor = sharedPrefs.edit();
        Gson gson = new Gson();

        String json = gson.toJson(gridItems); //Convert the array to json

        editor.putString(TAG2, json); //Put the variable in memory
        editor.commit();
东门理
2023-03-14

是的,这是正确的方法。对于SharedReferences您可以查看save arraylist to SharedReferences

对于Sqlite您可以阅读以下问题:在Sqlite数据库中保存arraylist以及如何将我的arraylist保存到Sqlite数据库中

对于Realm,您可以查看这个问题listObject-or-realmlistrialmobject-on-Realage-android并选择RealmAndroid留档:Realm Android

如果你问我哪种方法最简单,我会告诉你使用SharedReferences,但如果你有大量数据,你可以用数据库轻松存储和管理它们。

如果你想在SqliteRealm之间做出选择,我不能告诉你任何事情,因为这取决于你。如果你擅长并了解Sql,你可以选择Sqlite,因为在Sqlite中我们使用Sql命令,查询。但是我在我的项目中使用了Realm。你可以阅读这个页面:5-原因-为什么-你应该-选择-领域-超过-核心数据。在Realm中,您必须学习PojoRealmObject

总结:最简单的方法是使用共享首选项,但它适用于少量数据。

如果您有大量的数据,您必须使用数据库来轻松地管理它们。如果您了解Sql请访问Sqlite,如果您了解Pojo类并喜欢它们,请访问领域

谢豪
2023-03-14

您可以尝试将其存储在SQL数据库中。或以某种方式连接字符串在共享设置。对于复杂的数据,我会使用SQLite数据库。

 类似资料:
  • 如何在应用程序关闭后保存arraylist。这是我的环球班 这是我的旅行班 我想保存数组列表,当我关闭和打开应用程序的数组列表(所有旅行)被保存。如何做到这一点? 我想使用共享首选项,但我不知道如何做到这一点,因为它不是带有Trip的字符串it数组列表。有人能帮我在共享首选项中保存arraylist吗?

  • 我做了一个应用程序,她的主要目的是保存某种信息(现在哪个信息不重要),在我的应用程序中,我做了一个名为sp的< code>SharedPreferences对象和一个< code>SharedPreferences。编辑器调用编辑器的对象。 在我的方法中,我检索存储的HashSet,如下所示: 如果它是null,我得到一个新的HashSet(第一次使用),以及我需要存储的所有信息Im作为不同的字符

  • 问题内容: 我想将-object 保存到Android存储中的某个位置以快速检索并在其中显示数据。 这可能吗?如果可以,那么SQLite或外部存储适合哪种技术? 问题答案: 例。 并从活动中致电 不要忘记在清单文件中使用write_external_storage权限。

  • 问题内容: 我有一个新闻和一个消息。所述含有选择加入到阵列时teamObjects的的tableView。我想将此数组添加到其中,以便可以从其中包含需要teamObjects的url请求的访问它们。但是我不断得到: “试图为关键团队插入非财产列表对象(“”) 如果有比将其存储在更好的方法,我愿意接受其他建议 方法 我的对象 问题答案: 实际上,您将需要将自定义对象归档到其中,然后将其保存到用户默认

  • 问题内容: 我在数据库中进行了一系列测试和案例。每当测试过时时,它都会被注明过期日期,并且该测试的任何子案例也应注明过期日期。我看到两种方法可以做到这一点: 1)将保存功能修改为结束日期子案例。 2)创建一个接收器,侦听正在保存的测试模型,然后结束其子案例的日期。 有什么理由要使用另一个? 编辑: 我看到这篇博客文章建议每当您检查模型的给定值时都使用save方法。由于我正在检查end_date,也

  • 我正在使用Appium来自动化一个iOS的移动应用程序,对于一些元素,Appium检查员无法找到XPATH。 我已经读到,这是因为Appium使用仪器,只能定位iOS标准对象,而不是自定义对象。 我非常感谢您在这方面的任何建议/帮助。 示例:需要在下面的示例中找到单选按钮的XPATH app页面屏幕