9

ContentResolverを介して呼び出したいsave()カスタム ContentProvider クラスにカスタム メソッドがあります。MyContentProvider目的は、POJO を Bundle として に渡すことMyContentProviderです。

ここに記載され、ここで定義されているcallメソッドを使用しています

エラーは発生しません。メソッドはアクセスされません。

カスタム メソッドを使用した (短縮された) カスタム ContentProvider は次のようになります。

public class MyContentProvider extends ContentProvider {

    public void save() {

        Log.d("Test method", "called");
    }
}

私はそれを次のように呼びます:

ContentResolver contentResolver = context.getContentResolver();
Bundle bundle = new Bundle();
bundle.putSerializable("pojo", getPojo());
contentResolver.call(Contracts.CONTENT_URI, "save", null, bundle);

メソッドが呼び出されないのはなぜですか。saveこの時点に到達した場合、メソッド内の呼び出された Uri と Bundle にアクセスするにはどうすればよいsave()ですか? SOまたはWebのどこにも、これに関する参照が見つかりませんでした。

回答ありがとうございます。

4

2 に答える 2

21

カスタム関数を機能させるために、これで遊んでいます。あなたの質問に対するコメントで述べたように、重要なのは、コンテンツ プロバイダーに call() メソッドを実装して、渡す可能性のあるさまざまなメソッドを処理することです。

ContentResolver への呼び出しは次のようになります。

ContentResolver cr = getContentResolver();

cr.call(DBProvider.CONTENT_URI, "myfunction", null, null);

ContentProvider 内で call 関数を実装し、渡されたメソッド名をチェックします。

@Override
public Bundle call(String method, String arg, Bundle extras) {
    if(method.equals("myfunction")) {
        // Do whatever it is you need to do
    }
    return null;
}

それはうまくいくようです。

于 2014-01-09T00:26:51.087 に答える
-3

独自の ContentProvider を再定義する場合は、これらのメソッドをオーバーライドする必要があります。

  • onCreate()
  • クエリ()
  • 消去()
  • 入れる()
  • アップデート()
  • getType()

ただし、save() メソッドは ContentProvider のライフサイクル内にないため、呼び出すことができません。

于 2013-05-24T10:58:02.477 に答える