【问题标题】:ContentProvider without SQL没有 SQL 的 ContentProvider
【发布时间】:2011-04-08 21:14:28
【问题描述】:

我有两条数据需要从外部应用程序访问并存储。根据文档 ContentProviders 是唯一可能的方式,但它也提到了外部存储。 ContentProviders 实现了一个类似数据库的“接口”,对于两条数据来说,使用数据库是非常不必要的。我宁愿将它们保存到文件中,但是通过实现抽象方法来使用 ContentProvider 是有问题的,因为这些方法被结构化为数据库查询。

我知道没有规定 ContentProviders 必须使用下面的数据库来存储数据,但是有没有其他方法可以存储必须共享到文件系统的最少量数据?

【问题讨论】:

    标签: android android-2.2-froyo android-contentprovider


    【解决方案1】:

    我刚刚使用MatrixCursor 来解决这个问题。看看吧。

    编辑:对不起,我回答问题时刚刚扫描了问题。 ContentProvider 是应用程序共享数据的唯一方式。应用程序中的活动可以使用SharedPreferences 处理较小的数据,并添加持久性。

    Edit 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;
        }
    

    【讨论】:

    • 嗯,我需要在应用程序之间共享数据,所以我想我需要 ContentProviders。 MatrixCursor 看起来很有希望,因为它能够存储对象,但我想 MatrixCursor 需要在某个地方得到数据库的支持,是吗?
    • 一点也不!我刚刚创建了 MatrixCursor,并添加了元素。不需要分贝。当您实例化一个 MatrixCursor 时,您提供一个包含字段名称或列名称的 String[],然后只需添加数据集或行。从哪里获取数据完全取决于您。
    • 最终使用矩阵光标,其下方有标准文件输入/输出。然后使用 ContentResolver.query() 读取信息并将其存储在游标中。感谢您的帮助!
    【解决方案2】:

    SharedPreferences 类提供了一个通用框架,允许您保存和检索原始数据类型的持久键值对。您可以使用SharedPreferences 保存任何原始数据:booleansfloatsintslongs 和 字符串。此数据将在用户会话中持续存在(即使您的应用程序被终止)

    有用的链接:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      相关资源
      最近更新 更多