Android 什么是getContentResolver().call()以及如何使用它
我已经阅读了Android上的文档 我还寻找了一个合适的例子,但毫无结果 根据文档,有一种方法Android 什么是getContentResolver().call()以及如何使用它,android,android-contentresolver,Android,Android Contentresolver,我已经阅读了Android上的文档 我还寻找了一个合适的例子,但毫无结果 根据文档,有一种方法call,当标准内容提供程序方法不足时,可以使用该方法访问自定义提供程序方法: final Bundle call(Uri uri, String method, String arg, Bundle extras) Call a provider-defined method. 因此,在我的代码中,我执行: getContentResolver().call(uri, method, arg
call
,当标准内容提供程序方法不足时,可以使用该方法访问自定义提供程序方法:
final Bundle call(Uri uri, String method, String arg, Bundle extras)
Call a provider-defined method.
因此,在我的代码中,我执行:
getContentResolver().call(uri, method, arg, extras);
但它总是返回null
bundle。事实上,提供程序中的方法从未被调用
进一步的研究指出,合同存在(感知到的)差异,解析器有一个uri参数,没有等效的提供者参数:
Bundle call(String method, String arg, Bundle extras)
Call a provider-defined method.
我显然不明白什么。有人能给我指出正确的方向吗?要回答你的第二个问题,我猜
ContentProvider
版本的call()
不需要Uri
参数,因为与ContentResolver
不同,它不需要找到ContentProvider
;它自己调用该方法
进一步的研究指出,冲突解决程序有一个uri参数,但没有等效的提供程序参数
他们就是这样写的。Uri
只是用来识别ContentProvider
——ContentProvider
知道它是谁,因此不需要Uri
提供程序方法不允许@Override注释
是的,正如您在以下内容中所看到的:
但是,您的构建目标(例如,在Eclipse中,Project>Properties>Android)必须设置为API级别11或更高
中相应的call()
如下所示:
getContentResolver().call(Provider.Constants.CONTENT_URI,
Provider.SET_KEY_METHOD, "sekrit", null);
对。我在提供程序中有一个声明为“public”的方法,该方法被传递到contentresolver参数“method”中
这不是它的工作原理<在
ContentResolver上的code>call()
调用ContentProvider上的call()
您的ContentProvider
是否有与方法
字符串中的名称匹配的方法?是。我在提供程序中有一个声明为“public”的方法,它被传递到contentresolver参数“method”中。如果您提供一些(最少的)示例代码,它可能会帮助我们回答您的问题。Mea cupla。清理项目后,删除@override注释的请求神奇地消失了。依赖这种方法是一种好的做法吗?定义了call()方法的ContentProvider是否显示了正确的用法?@sandstar:“依赖此方法是一种良好的做法吗?”--如果您是ContentProvider
的作者及其使用者,当然可以。“仅定义了call()方法的ContentProvider是否显示了正确的用法?”--IMHO,否。call()
充其量是基本ContentProvider
功能的附加组件。对于程序性工作,ContentProvider
是无用的。谢谢您的解释!我认为这些方法是通过反射调用的。显然,在典型的面向对象模型中,使用ContentResolver/providers并不能强制执行契约。@AndroidAddict这是本文讨论的另一个问题。
getContentResolver().call(Provider.Constants.CONTENT_URI,
Provider.SET_KEY_METHOD, "sekrit", null);