我已在这里寻找答案,但没有适用于我的具体案例。我有一个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")
答案 0 :(得分:0)
您可以尝试将其存储在SQL数据库中。或者以某种方式在SharedSettings中连接字符串。对于复杂数据,我会使用SQLite数据库。
答案 1 :(得分:0)
是的,这是正确的方法。对于SharedPreferences
,您可以查看save-arraylist-to-sharedpreferences
对于Sqlite
,您可以阅读以下问题:saving-arraylists-in-sqlite-databases和how-to-save-my-arraylist-into-sqlite-database
对于Realm
,您可以查看此问题listobject-or-realmlistrealmobject-on-realm-android并转到Realm
Android
文档:Realm Android
如果您问我哪种方式最简单,我会告诉您使用SharedPreferences
,但如果您拥有大量数据,则可以使用数据库轻松存储和管理它们。
如果您想在Sqlite
和Realm
之间做出选择,我无法告诉您任何事情,因为这取决于您。如果您擅长并了解Sql
,您可以去Sqlite
1}}因为在Sqlite中我们使用Sql
命令,查询。但是我在我的项目中使用Realm
。您可以阅读此页面:5-reasons-why-you-should-choose-realm-over-coredata。在Realm
,您必须了解Pojo
和RealmObject
。
摘要:最简单的方法是使用SharedPreferences
,但它适用于少量数据。
如果您有大量数据,则必须使用数据库轻松管理它们。如果你知道Sql
去Sqlite
,如果你知道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();