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

时间:2016-07-09 09:54:59

标签: android arraylist

我已在这里寻找答案,但没有适用于我的具体案例。我有一个arrayList

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

用户可以通过与应用程序交互来添加条目。我知道SharedPreferences不能与对象一起工作,我无法让gson工作。

我想在onPause中保存arraylist并在onCreate中查找预先存在的已保存列表。这是正确的方法吗?

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

对于Sqlite,您可以阅读以下问题:saving-arraylists-in-sqlite-databaseshow-to-save-my-arraylist-into-sqlite-database

对于Realm,您可以查看此问题listobject-or-realmlistrealmobject-on-realm-android并转到Realm Android文档:Realm Android

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

如果您想在SqliteRealm之间做出选择,我无法告诉您任何事情,因为这取决于您。如果您擅长并了解Sql,您可以去Sqlite 1}}因为在Sqlite中我们使用Sql命令,查询。但是我在我的项目中使用Realm。您可以阅读此页面:5-reasons-why-you-should-choose-realm-over-coredata。在Realm,您必须了解PojoRealmObject

摘要:最简单的方法是使用SharedPreferences,但它适用于少量数据。

如果您有大量数据,则必须使用数据库轻松管理它们。如果你知道SqlSqlite,如果你知道Pojo课程并且喜欢他们去Realm

答案 2 :(得分:0)

所以我设法让它工作,它是很多代码的混合物。 首先在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值并在OnCreate中使用它

在onPause

//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();