ContentProvider without SQL
我有两段需要从外部应用程序访问并存储的数据。根据文档ContentProviders是唯一可能的方式,但它也提到了外部存储。 ContentProviders实现了一个类似数据库的“接口”,对于两段数据使用数据库是非常不必要的。我宁愿将它们保存到一个文件中,但通过实现抽象方法来使用ContentProvider是有问题的,因为这些方法的结构是数据库查询。ContentProvider without SQL
我知道没有任何内容指定ContentProviders必须使用下面的数据库来存储数据,但是有没有其他方法来存储必须共享到文件系统的最小数量的数据?
我刚用MatrixCursor
来解决确切的问题。看看它。
编辑:对不起,我刚刚扫描了问题,当我回答它。 ContentProvider
是应用程序共享数据的唯一方式。对于较小的数据,应用程序中的活动可以使用SharedPreferences
,并增加持久性。
编辑v2:以下是我用于为我的ContentProvider的查询函数填充MatrixCursor的函数。我使用的是我创建的预定义VIEW,它返回一组不同的值,并设置一个带有_ids的游标,我可以将其传递给我的ExpandableListView。
private Cursor getFactions() {
MatrixCursor mc = new MatrixCursor(Model.Faction.PROJECTION);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor c = db.query(MODELFACTION_TABLE_NAME, new String[] { Model.Faction.FACTION }, null, null, null, null, Model.Faction.FACTION + " ASC");
c.moveToFirst();
do {
mc.addRow(new Object[] { c.getPosition(), c.getString(c.getColumnIndex(Model.Faction.FACTION))});
} while (c.moveToNext() && ! c.isAfterLast());
c.close();
db.close();
return mc;
}
的SharedPreferences
类提供了一个总体框架,使您可以保存和检索的原始数据类型的持久键 - 值对。您可以使用SharedPreferences
保存所有的原始数据:布尔,浮,整数,多头,并串。这些数据将跨用户会话(即使你的应用程序被杀害)
有用的链接仍然存在:
http://developer.android.com/reference/android/content/SharedPreferences.html
http://developer.android.com/guide/topics/data/data-storage.html
嗯,我需要,所以我想我需要ContentProviders应用程序之间共享数据。由于存储对象的能力,MatrixCursor看上去很有希望,但我认为MatrixCursor需要某个数据库支持。 – 2011-04-10 04:26:05
完全没有!我刚刚创建了MatrixCursor,并添加了这些元素。没有分贝需要。当你实例化一个MatrixCursor时,你提供一个String []字段名或列名,然后只需添加数据集或行。你从哪里得到这些数据完全取决于你。 – 2011-04-10 05:28:06
使用下面的标准文件输入/输出的矩阵光标结束。然后使用ContentResolver.query()读取信息并将其存储在游标中。谢谢您的帮助! – 2011-04-14 20:38:14