dagger2在ContentProvider中注入数据库错误NoClassDefFoundError - DbOpenHelper_Factory.get

问题描述 投票:0回答:1

我正在尝试设置Android MVPApp并在我的项目中成功设置Dagger 2,butterknife并且它正在处理我的设备上的所有活动但是仍然在Android的firebase crashlytics仍然显示有几个用于Android 19及以下版本的用户受此问题的影响。这是来自firebase控制台的堆栈跟踪 -

com.urtutors.eduwiser.data.db.DbOpenHelper_Factory.get (DbOpenHelper_Factory.java:35)
com.urtutors.eduwiser.data.db.DbOpenHelper_Factory.get (DbOpenHelper_Factory.java:10)
dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
com.urtutors.eduwiser.data.db.AppDbHelper_Factory.get (AppDbHelper_Factory.java:21)
com.urtutors.eduwiser.data.db.AppDbHelper_Factory.get (AppDbHelper_Factory.java:7)
dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
com.urtutors.eduwiser.di.module.ApplicationModule_ProvideDbHelperFactory.get (ApplicationModule_ProvideDbHelperFactory.java:30)
com.urtutors.eduwiser.di.module.ApplicationModule_ProvideDbHelperFactory.get (ApplicationModule_ProvideDbHelperFactory.java:10)
dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
com.urtutors.eduwiser.data.AppDataManager_Factory.get (AppDataManager_Factory.java:43)
com.urtutors.eduwiser.data.AppDataManager_Factory.get (AppDataManager_Factory.java:11)
dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
com.urtutors.eduwiser.di.module.ApplicationModule_ProvideDataManagerFactory.get (ApplicationModule_ProvideDataManagerFactory.java:30)
com.urtutors.eduwiser.di.module.ApplicationModule_ProvideDataManagerFactory.get (ApplicationModule_ProvideDataManagerFactory.java:10)
dagger.internal.DoubleCheck.get (DoubleCheck.java:47)
com.urtutors.eduwiser.MvpApp_MembersInjector.injectMembers (MvpApp_MembersInjector.java:38)
com.urtutors.eduwiser.MvpApp_MembersInjector.injectMembers (MvpApp_MembersInjector.java:9)
com.urtutors.eduwiser.di.component.DaggerApplicationComponent.inject (DaggerApplicationComponent.java:192)
com.urtutors.eduwiser.MvpApp.onCreate (MvpApp.java:55)
android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1013)
android.app.ActivityThread.handleBindApplication (ActivityThread.java:4730)
android.app.ActivityThread.access$1600 (ActivityThread.java:175)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1368)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:146)
android.app.ActivityThread.main (ActivityThread.java:5602)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1283)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1099)
dalvik.system.NativeStart.main (NativeStart.java)

这是firebase控制台的问题摘要 -

enter image description here

堆栈跟踪表明问题源自MvpApp.java,所以这里是第55行的错误源 -

Line 55

堆栈跟踪表明错误即将到来,因为它无法将dagger组件注入主应用程序 -

mApplicationComponent = DaggerApplicationComponent.builder()
                .applicationModule(new ApplicationModule(this)).build();

        mApplicationComponent.inject(this);

那么,任何人都可以帮助我识别,调试或修复此问题。

我试着搜索周围的问题并找到了 -

Inject database in a ContentProvider with dagger

有一个建议的答案,将组件初始化移动到attachbasecontext方法而不是onCreate,我想尝试这个解决方案,但我不明白如何获取YourMainApplication的实例

打电话给YourMainApplication.get(context).inject(this);

android dependency-injection dagger-2 greendao butterknife
1个回答
0
投票

日志是不够的,但似乎你有循环依赖注入。你可以检查你的课程注射。

例如

public class A {
   @Inject 
   B classB; 

}

public class B {
   @Inject
   A classA; // this injection creates circular injection and also can cause stackoverflow exception
}

你必须避免这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.