我已经在这里寻找答案,但没有一个适用于我的具体情况。我有一个数组列表
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")
所以我设法让它工作,这是一个混合了很多代码。首先,在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();
是的,这是正确的方法。对于SharedReferences
您可以查看save arraylist to SharedReferences
对于Sqlite
您可以阅读以下问题:在Sqlite数据库中保存arraylist以及如何将我的arraylist保存到Sqlite数据库中
对于Realm
,您可以查看这个问题listObject-or-realmlistrialmobject-on-Realage-android并选择Realm
Android
留档:Realm Android
如果你问我哪种方法最简单,我会告诉你使用SharedReferences
,但如果你有大量数据,你可以用数据库轻松存储和管理它们。
如果你想在Sqlite
和Realm
之间做出选择,我不能告诉你任何事情,因为这取决于你。如果你擅长并了解Sql
,你可以选择Sqlite
,因为在Sqlite中我们使用Sql
命令,查询。但是我在我的项目中使用了Realm
。你可以阅读这个页面:5-原因-为什么-你应该-选择-领域-超过-核心数据。在Realm
中,您必须学习Pojo
和RealmObject
。
总结:最简单的方法是使用共享首选项
,但它适用于少量数据。
如果您有大量的数据,您必须使用数据库来轻松地管理它们。如果您了解Sql
请访问Sqlite
,如果您了解Pojo类并喜欢它们,请访问领域
您可以尝试将其存储在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页面屏幕