Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
uri在什么情况下传递给Android';s ContentObserver.onChange()回调?_Android_Android Contentprovider_Contentobserver - Fatal编程技术网

uri在什么情况下传递给Android';s ContentObserver.onChange()回调?

uri在什么情况下传递给Android';s ContentObserver.onChange()回调?,android,android-contentprovider,contentobserver,Android,Android Contentprovider,Contentobserver,Android的ContentObserver类的onChange()方法说,“在可用时包括更改的内容Uri。”Uri在什么情况下可用?在什么情况下不可用 uri参数是在API级别16(Android 4.1)中添加的,因此我希望在Android 4.1及更高版本中设置它。然而,我在安卓4.3上看到了一个未设置uri的案例 方法1:工程 调用MyContentObserver.onChange()并向其传递有效的uri: contentResolver.registerContentObserv

Android的ContentObserver类的onChange()方法说,“在可用时包括更改的内容Uri。”Uri在什么情况下可用?在什么情况下不可用

uri参数是在API级别16(Android 4.1)中添加的,因此我希望在Android 4.1及更高版本中设置它。然而,我在安卓4.3上看到了一个未设置uri的案例

方法1:工程 调用MyContentObserver.onChange()并向其传递有效的uri:

contentResolver.registerContentObserver(myUri, true, new MyContentObserver());
方法2:不起作用——为什么不呢? 调用了MyContentObserver.onChange(),但uri参数为null:

contentResolver.query();
cursor.registerContentObserver(new MyContentObserver);

这是预期的吗?其中一个比另一个更受欢迎吗?我已经用“content://com.google.android.gm/me@example.com/labels“并使用我自己的自定义ContentProvider。

如果您在公共表(如people、mediaprovider等)上设置
ContentObserver
,则很遗憾,您可能不会收到任何
Uri
作为参数,它可能为空,因为它取决于内容提供者实现。要在更改时接收有效的
Uri
,必须修改相应的
ContentProvider
以通知更改以及
Uri

e、 g
getContext().getContentResolver().notifyChange(Uri,“您的Uri”)
//这将通知所有注册的
ContentObserver
,其中包含修改后的相关数据集的
Uri


如果您正在编写自己的
ContentProvider
,则在对数据库执行更新、删除或插入操作时,请使用上述行。

这是一个老问题,但仍然没有回答。所以我会补充我的答案,以防人们仍然对此感到好奇


当您的内容提供商使用
getContext().getContentResolver().notifyChange(URI,“您的URI”)通知注册的观察者时
,它向
内容响应程序
请求它。该方法的返回值是您在内容响应程序的
registerContentObserver()
方法中注册的
ContentObserver
,这就是您在第一种情况下所做的。但是,在第二种情况下,您使用
游标
registerContentObserver()
方法在
游标
中注册了观察者,因此
内容响应者
不知道它。

知道为什么游标.registerContentObserver()总是给出空uri吗(即使ContentPRovider使用uri调用notifyChange())?这是预期的吗?@MarkDoliner在ContentObserver的文档中指出,带有uri参数的onChange()版本仅在API 16(Android 4.1)中存在这可能是你的问题。我想这可能不是我看到的具体问题的原因,因为我在使用4.3进行测试。我只是偶然发现了同样的东西,可能是一个bug。我使用了你的方法1。