之前曾经问过这个 - 但从未回答过。所以我再试一次运气。
在同步方面,我的应用程序是Google IO计划应用程序的完美克隆 - 我在this位置使用了他们的代码。
当针对SDK 25运行时,一切都在这里工作 - 当我转到26时,它会因此异常而崩溃:
12-28 21:11:13.641 6153-6190/? E/AndroidRuntime: FATAL EXCEPTION: IntentService[DataBootstrapService]
Process: de.XXX.XXX.debug, PID: 6153
java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
正如其他资源所示:是的,我已在我的内容提供商处设置了权限。 这个错误很荒谬。我不知道它为什么会出现null和用户0。
有没有人知道要寻找什么? 谢谢!
您要求提供更多详细信息,但我确实像Google在IO计划中那样做了。
我的AndroidManifest包括我的提供商,如下所示:
<provider
android:name=".provider.PendelbusProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:syncable="true"/>
导致崩溃的行是:
getContentResolver().notifyChange(Uri.parse(PendelbusContract.CONTENT_AUTHORITY), null, false);
我的CONTENT_AUTHORITY定义如下:(间接通过构建变量)
public static final String CONTENT_AUTHORITY = BuildConfig.AUTHORITY;
// equals to: "de.zordid.pendelbus.debug.provider"
我根本不明白该消息应该表明什么。
什么是“提供者null”,什么是“用户0”?
答案 0 :(得分:0)
我的问题的答案在于定义URI以及使用Uri.getAuthority()
从中获得的权限。
将其与Google自己的软件中的经典BUG配对,这是一个开源的Google IO Schedule应用程序。
在DataBootstrapService
第93行中,他们会这样做:
getContentResolver().notifyChange(Uri.parse(ScheduleContract.CONTENT_AUTHORITY), null, false);
但是,我不知道的事:ScheduleContract.CONTENT_AUTHORITY是一个只包含权限的字符串。它不会生成有效的URI,因此从一开始就存在错误并导致我的问题。
如果您测试此创建的Uri并致电getAuthority
,您会看到该死的null
。
修复:使用类似BASE_CONTENT_URI
的内容,只有“content://”+ AUTHORITY。然后它被修复了。
希望这有助于其他人。