dagger2 Вставить базу данных в ошибку ContentProvider NoClassDefFoundError - DbOpenHelper_Factory.get - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь настроить Android MVPApp и установить Dagger 2, Butterknife успешно в моем проекте, и он работает со всеми действиями на моем устройстве, но по-прежнему аварийный отказ Firebase Android по-прежнему показывает несколько пользователей с 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

Трассировка стека предполагает, что ошибка возникает, когда не удается внедрить компонент кинжала в основное приложение здесь -

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

        mApplicationComponent.inject(this);

Итак, кто-нибудь может помочь мне определить, отладить или исправить эту проблему.

Я попытался найти проблему вокруг и нашел это -

Внедрение базы данных в ContentProvider с помощью кинжала

с предложенным ответом для перемещения инициализации компонента в метод attachbasecontext вместо onCreate, я хотел попробовать это решение, но я не понимаю, как получить экземпляр YourMainApplication

позвонить YourMainApplication.get(context).inject(this);

1 Ответ

0 голосов
/ 30 апреля 2019

Журнала недостаточно, но, похоже, у вас есть циклическое внедрение зависимостей. Вы можете проверить инъекции на ваших уроках.

Например

public class A {
   @Inject 
   B classB; 

}

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

Вы должны избегать этой ситуации.

...