为了保存实际的警报,我认为一个小的私有sql数据库就足够了,我之前用它来保存数据。但是,我无法帮助,但认为创建数据库需要很多功能所以我可以使用共享首选项文件,只需使用几个链表或其他东西来为每个警报存储一些参数。这将占用更少的空间。
但这让我想到了,实际上最喜欢的方式是什么?我的意思是性能,严重性,安全性以及需要实现共享首选项文件或SQL数据库的工作量。
答案 0 :(得分:2)
以下是我认为的优点和缺点:
共享首选项 - 用于存储键 - 值对。数据保存在私有文件中。没有结构化数据的概念,没有标准化的查询。写入/读取执行磁盘I / O操作,因此不是超快。
SQLite - 用于存储结构化数据。 db存储为私有文件。用于查询的SQL。性能与Shared Prefs类似。
我不会将Shared Prefs用于任何更复杂的数据。如果将对数据集执行搜索,那么SQLite就不费吹灰之力了。数据库的大小仅取决于所使用的数据量。如果您对存储的内容以及存储方式很了解,那么您不应该看到数据库失控。
答案 1 :(得分:1)
AFAIK SharedPreferences
总是能够更快地访问数据和优化存储。即使是代码也很容易实现。
我会建议您的方案。 为了报警你几乎不需要4个属性。
暂停
编译'com.google.code.gson:gson:2.3.1'
<强> Alarm.java 强>
class Alarm{
private String desc;
private Date time;
private boolean snooze;
private int repeat; // 1 - daily ,2- monthly ,3 - yearly ,4 - none
}
检索警报
import java.lang.reflect.Type;
Gson gson = new Gson();
Type type = new TypeToken<List<Alarm>>(){}.getType();
List<Alarm> alarms = gson.fromJson(preferences.getString("alarm",""), type);
添加警报
Gson gson = new Gson();
List<Alarm> alarms = new ArrayList<>();
alarms.add(new Alarm()); // adding alarm
String jsonAlarm = gson.toJson(alarms); //coverting list to json and saving back
editor.put("alarm",jsonAlarm);
editor.commit();