Я использую Dagger2 для внедрения своих зависимостей во все мои приложения.
Несколько дней назад я начал получать отчеты о сбоях для одного из приложений от устройств Samsung Android 7.0 (только эти).
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2924)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
..
Caused by: java.lang.ClassCastException:
at de.package.name.MyApplication.get(MyApplication.java:43)
at de.package.name.ui.base.BaseActivity.onCreate(BaseActivity.java:53)
at de.package.name.ui.startup.StartupActivity.onCreate(StartupActivity.java:26)
at android.app.Activity.performCreate(Activity.java:6912)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)
Класс MyApplication:
public class MyApplication extends MultiDexApplication {
private AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
setupAppComponent();
}
private void setupAppComponent() {
appComponent = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.userApiModule(new UserApiModule())
.build();
appComponent.inject(this);
}
public static MyApplication get(Context context) {
return (MyApplication) context.getApplicationContext();
}
}
Соответствующая часть класса BaseActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.get(this).getAppComponent().inject(this);
}
И, наконец, часть StartupActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setupComponent(MyApplication.get(this).getAppComponent());
setContentView(R.layout.activity_startup);
startupPresenter.bindView(this);
}
public void setupComponent(AppComponent appComponent) {
startupComponent = DaggerStartupComponent.builder()
.appComponent(appComponent)
.startupModule(new StartupModule())
.build();
startupComponent.inject(this);
}
Я уже обновил Dagger до самой последней версии (пока 2.11). Но у меня нет никаких идей по этому вопросу. Кроме того, я не могу воспроизвести его на своем устройстве Samsung S8 7.0.
Так что если у вас есть какие-либо идеи, пожалуйста, дайте мне знать!
Ваше здоровье
Изменить: Если кто-то столкнется с этой проблемой. Взгляните сюда: RuntimeException с Dagger 2 на Android 7.0 и устройствах Samsung Это может быть вашим решением.