9

save()我的自定义 ContentProvider 类中有一个自定义方法,MyContentProvider我想通过 ContentResolver 调用它。目标是将 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 和save()方法中的 Bundle?我在 SO 或网络上的任何地方都找不到任何参考。

谢谢您的回答!

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()
  • 询问()
  • 删除()
  • 插入()
  • 更新()
  • 获取类型()

但是 save() 方法不在 ContentProvider 的生命周期内,无法调用。

于 2013-05-24T10:58:02.477 回答