14

GPS から取得した修正を SQLite データベースに保存するために使用するカスタム ContentProvider があります。このクラスは ContentProvider メソッド (delete、insert、query...) をオーバーライドしますが、最後の修正をクエリするメソッドも含まれていることに注意してください。

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#getLastFixContentProvider で定義されたカスタム メソッドを呼び出すにはどうすればよいですか?

この場合、ContentProviders/ContentResolvers がどのように機能するのか理解できないかもしれませんが、Google が提供する公式の Android ドキュメントは、この意味であまり明確ではありません。

4

2 に答える 2

13

しかし、カスタムメソッド()を呼び出すことができませんFixesContentProvider#getLastFix

それは完全に真実です。ただし、この場合は、メソッドquerygetLastFixメソッドの両方がオブジェクトを返すという1つの事実を利用でき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;
}

実際、このqueryメソッドは、が与えられた場合に結果を返すことを想定していUriます。したがって、最後の修正を取得する必要がある場合は、最後の修正が必要なURIを指定する必要があります。

于 2010-07-24T15:25:05.217 に答える
10

API レベル 11 の時点で、追加の柔軟性を提供するメソッドContentResolver.call(Uri, String, String, Bundle)があります。

于 2013-02-27T12:12:52.723 に答える