14

我有一个自定义的 ContentProvider,用于将从 GPS 获得的修复程序存储到 SQLite 数据库中。此类覆盖 ContentProvider 方法(删除、插入、查询...),但请注意,我还包含一个查询最后修复的方法。

public class FixesContentProvider extends ContentProvider {
    @Override
    public int delete(...) { ... }
    ...
    @Override
    public Cursor query(...) { ... }

    public Cursor getLastFix(Uri uri) { ... }
}

通过调用从其他服务或活动中查询数据非常容易getContentResolver()

ContentResolver cR = getContentResolver();
Cursor fixes = cR.query(CONTENT_URI, ...);

但我无法调用我的自定义方法 ( FixesContentProvider#getLastFix)。 如何调用 ContentProvider 中定义的自定义方法?

也许我不明白 ContentProviders/ContentResolvers 在这种情况下是如何工作的,但是Google 提供的官方 Android 文档在这个意义上并不是很清楚。

4

2 回答 2

13

但我无法调用我的自定义方法 ( FixesContentProvider#getLastFix)。

这是完全正确的。但是,在这种情况下,您可以利用一个事实:querygetLastFix方法都返回一个Cursor对象。因此,我所做的就是为您传递给的 URI 添加一些值query,然后决定您要实际执行的操作:querygetLastFix. 例如:

public Cursor query(Uri uri,...) { 
    if ( uri says it has to return the last fix )
        return getLastFix(uri);
    // otherwise, do normal operations...
    return cursor;
}

实际上,query假设该方法返回一个结果,给定一个Uri. 因此,如果您需要检索最后一次修复,您必须在 URI 中指定您想要最后一次修复。

于 2010-07-24T15:25:05.217 回答
10

从 API 级别 11 开始,有一个方法ContentResolver.call(Uri, String, String, Bundle)提供了额外的灵活性。

于 2013-02-27T12:12:52.723 回答