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; 
    } 
+0

嗯,我需要,所以我想我需要ContentProviders应用程序之间共享数据。由于存储对象的能力,MatrixCursor看上去很有希望,但我认为MatrixCursor需要某个数据库支持。 – 2011-04-10 04:26:05

+0

完全没有!我刚刚创建了MatrixCursor,并添加了这些元素。没有分贝需要。当你实例化一个MatrixCursor时,你提供一个String []字段名或列名,然后只需添加数据集或行。你从哪里得到这些数据完全取决于你。 – 2011-04-10 05:28:06

+1

使用下面的标准文件输入/输出的矩阵光标结束。然后使用ContentResolver.query()读取信息并将其存储在游标中。谢谢您的帮助! – 2011-04-14 20:38:14

SharedPreferences类提供了一个总体框架,使您可以保存和检索的原始数据类型的持久键 - 值对。您可以使用SharedPreferences保存所有的原始数据:布尔整数多头,并。这些数据将跨用户会话(即使你的应用程序被杀害)

有用的链接仍然存在:

http://developer.android.com/reference/android/content/SharedPreferences.html

http://developer.android.com/guide/topics/data/data-storage.html