我有一个使用ActiveAndroid的应用程序,它一直工作正常.然而; 现在当我尝试将模型保存到数据库时,我得到了一个SecurityException.
堆栈是:
Error saving model java.lang.SecurityException: Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
at android.os.Parcel.readException(Parcel.java:1942)
at android.os.Parcel.readException(Parcel.java:1888)
at android.content.IContentService$Stub$Proxy.notifyChange(IContentService.java:801)
at android.content.ContentResolver.notifyChange(ContentResolver.java:2046)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1997)
at android.content.ContentResolver.notifyChange(ContentResolver.java:1967)
at com.activeandroid.Model.save(Model.java:162)
[.... local stack removed]
Run Code Online (Sandbox Code Playgroud)
还有其他人经历过这个吗?我们是否需要在AndroidManifest.xml中指定Content Provider?
对不起,但我还没有一个孤立的例子.我会努力把东西放在一起.
提前致谢
我知道,在没有具体细节的情况下提出这类问题非常困难; 有问题的项目是专有的,我无法在任何其他项目中重现该问题.
所以我在build.gradle文件中添加了以下内容:
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
exclude group: 'com.square.dagger'
}
androidTestCompile('com.jakewharton.espresso:espresso-support-v4:1.1-r3') {
exclude group: 'com.android.support'
}
Run Code Online (Sandbox Code Playgroud)
我也确定了两种产品口味,但都没有.我的测试类是:
public class MainActivityInstrumentationTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity myActivity;
private Spinner spinner;
public MainActivityInstrumentationTest() {
super(MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
myActivity = getActivity();
spinner = (Spinner)myActivity.findViewById(R.id.watch_category);
}
public void testTextView() {
assertOnScreen(myActivity.getWindow().getDecorView(), spinner);
}
}
Run Code Online (Sandbox Code Playgroud)
现在在工作室,它发现MainActivity.class
很好,并添加正确的导入.然而; 当我运行测试时,构造函数抛出一个异常,即找不到.class的完全限定路径.我试过跑步gradle
,--debug
我没有看到任何与众不同的东西.生成的apk文件有一个classes.dex并使用dex2jar
我在那里看到MainActivity.class.因此,在测试执行期间找不到类文件的原因有点丢失.有没有人有任何其他方法,我可以尝试调试这种情况,就像我说我有其他项目工作得很好,我无法修改它们来展示这种行为.
对此的任何帮助将不胜感激.
编辑:来自logcat的完整跟踪
W/dalvikvm( 4371): Class resolved by unexpected DEX: Landroid/support/v7/app/ActionBarActivity;(0xa501f5e8):0x94c6a000 ref [Landroid/support/v4/app/FragmentActivity;] Landroid/support/v4/app/FragmentActivity;(0xa501f5e8):0x9528b000
W/dalvikvm( 4371): …
Run Code Online (Sandbox Code Playgroud) android android-studio android-gradle-plugin android-espresso
我浏览了许多帖子,但没有找到任何可以帮助我理解 LeakCanary 报告泄漏的原因。我有一个带有 a 的主要活动,com.google.android.material.bottomappbar.BottomAppBar
它显示了 a BottomSheetDialogFragment
。当您在底部工作表中选择一个项目时,它会更新一些文本,然后关闭对话框片段。现在使用 LeakCanary 运行它会在出现对话框并选择一个项目时显示泄漏。
泄漏看起来像:
====================================
HEAP ANALYSIS RESULT
====================================
1 APPLICATION LEAKS
References underlined with "~~~" are likely causes.
Learn more at https://squ.re/leaks.
152090 bytes retained by leaking objects
Signature: 3841703253a9bf9893936b1dd318c9dd54bf5a8
????
? GC Root: System class
?
?? android.app.ActivityThread class
? Leaking: NO (MainActivity? is not leaking and a class is never leaking)
? ? static ActivityThread.sCurrentActivityThread
?? android.app.ActivityThread instance
? Leaking: NO (MainActivity? is not leaking)
? ? ActivityThread.mActivities …
Run Code Online (Sandbox Code Playgroud)