【发布时间】:2016-07-17 05:20:05
【问题描述】:
在我的 Android 应用中,我有一个
扩展 SQLIteOpenHelper 的 SQLiteHelper 类,负责表创建和升级等工作。
对 SQLiteHelper 对象执行 CRUD 操作的 SQLiteDatasource 类。
我想在其中一个表中预加载某些项目,以便在用户第一次使用该应用程序时出现一些内容。这些项目可能会改变,所以我想让它们模块化。
现在我是这样做的:
public class MyDefaults {
public static final ArrayList<HashMap<String, String>> MY_DEFAULTS;
static {
MY_DEFAULTS = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
//All the values below you change to whatever defaults you want
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1A");
map.put(SQLiteHelper.KEY_2, "Value 2A");
map.put(SQLiteHelper.KEY_3, "Value 3A");
MY_DEFAULTS.add(new HashMap<String, String>(map));
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1B");
map.put(SQLiteHelper.KEY_2, "Value 2B");
map.put(SQLiteHelper.KEY_3, "Value 3B");
MY_DEFAULTS.add(new HashMap<String, String>(map));
map.clear();
map.put(SQLiteHelper.KEY_1, "Value 1C");
map.put(SQLiteHelper.KEY_2, "Value 2C");
map.put(SQLiteHelper.KEY_3, "Value 3C");
MY_DEFAULTS.add(new HashMap<String, String>(map));
//and so on
}
}
然后在我的 SQLiteDatasource 类中,我有一个方法可以执行这些默认值的插入:
public void preloadDefaults() {
mDatabase.beginTransaction();
try {
for (HashMap<String, String> map : MyDefaults.MY_DEFAULTS) {
ContentValues values = new ContentValues();
values.put(SQLiteHelper.KEY_1, map.get(SQLiteHelper.KEY_1));
values.put(SQLiteHelper.KEY_2, map.get(SQLiteHelper.KEY_2));
values.put(SQLiteHelper.KEY_3, map.get(SQLiteHelper.KEY_3));
mDatabase.insert(SQLiteHelper.SOME_TABLE, null, values);
}
}
finally {
mDatabase.endTransaction();
}
}
我的做法是否被认为是不好的做法?有没有更好的方法来定义在创建表后插入到表中的“默认值”?可能通过 XML 而不是静态类?
注意:我不能只复制外部数据库,因为我实际上是在插入这些字段以及在运行时创建的其他一些值(上面的代码是我真实代码的简化)。
【问题讨论】:
-
我可能会使用 CSV 文件。使输入看起来尽可能像存储。
-
@CoreyOgburn 这是一个非常有趣的想法。但是我在自动完成中没有看到任何 CSV 阅读器。您有什么特别推荐的方法吗?
-
我也开始寻找,因为我可能会在我的一个项目中这样做。任何有建议的人总是提到OpenCSV,但我还没有这方面的经验。
-
我在我的一个项目中使用了 OpenCSV,没有任何问题。
-
我是这个 Android/开源东西的新手——我如何将 OpenCSV 整合到我的项目中?
标签: android sqlite hashmap android-sqlite