Android:在ContentProvider中调用自定义方法

Gui*_*ido 14 android android-contentprovider

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

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

    public Cursor getLastFix(Uri uri) { ... }
}
Run Code Online (Sandbox Code Playgroud)

通过调用查询来自其他服务或活动的数据非常容易getContentResolver().

ContentResolver cR = getContentResolver();
Cursor fixes = cR.query(CONTENT_URI, ...);
Run Code Online (Sandbox Code Playgroud)

但是我无法调用我的自定义方法(FixesContentProvider#getLastFix). 我怎样才能调用ContentProvider中定义的自定义方法?

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

Cri*_*ian 13

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

这完全正确.但在这种情况下,您可以利用一个事实:both querygetLastFixmethods都返回一个Cursor对象.所以,我所做的就是为你传递给你的URI添加一些值query,然后决定你想要实际做什么:query或者getLastFix.例如:

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

事实上,该query方法假设返回一个结果,给定a Uri.因此,如果需要检索上一个修复,则必须在URI中指定要进行上一次修复.


Dra*_*kić 10

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