如何解决共享数据的 Android 应用程序:找不到用户 0 的提供程序 null;期望为这个权威找到一个有效的 ContentProvider
我有 App A,它在 ContentProvider
的帮助下与 App B 共享其数据库。
这两个应用的 gradle 中都有 Sdk 版本 28。
App A 的清单
<permission android:name="com.example.mldemo.READ_DATABASE" android:protectionLevel="normal" />
<permission android:name="com.example.mldemo.WRITE_DATABASE" android:protectionLevel="normal" />
....
<application
...
<provider android:name=".content_providers.MLProvider"
android:authorities="com.example.mldemo"
android:enabled="true"
android:exported="true"
android:readPermission="com.example.mldemo.READ_DATABASE"
android:writePermission="com.example.mldemo.WRITE_DATABASE"/>
App B 的清单
<uses-permission android:name="com.example.mldemo.READ_DATABASE" />
<uses-permission android:name="com.example.mldemo.WRITE_DATABASE" />
App B 像这样使用 ContentProvider
:
private static final String AUTHORITY = "com.example.mldemo";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/");
....
Uri uri = Uri.parse(CONTENT_URI + "/CONTACTS");
ContentValues newValues = new ContentValues();
newValues.put("NAME",contact.getName());
...
newUri = context.getApplicationContext().getContentResolver().insert(
uri,newValues
);
当我QUERY
contentProvider
时,它工作正常。
当我 insert
时会出现问题。我一直有这个错误:
Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
解决方法
我找到了解决方案。 在ContentProvider中做insert时,调用notifyChange时需要传递权限:
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/");
...
Uri _uri = ContentUris.withAppendedId(Uri.parse(CONTENT_URI + TABLE_NAME),newId);
getContext().getContentResolver().notifyChange(_uri,null);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。