Я хочу интегрировать Dagger2, но я не могу собрать свой проект, сборка завершилась неудачно:
error: com.example.animalslibrary.ui.home.activity.HomeActivity cannot be provided without an @Inject constructor or from an @Provides-annotated method.
com.example.animalslibrary.ui.home.activity.HomeActivity is injected at
com.example.animalslibrary.AppComponent.injectsHomeActivity(homeActivity)
Я искал ответ около 3 часов и сейчас прошу у вас помощи.
Мои действия шаг за шагом:
1) Добавить зависимости в Gradle:
implementation 'com.google.dagger:dagger:2.7'
annotationProcessor 'com.google.dagger:dagger-compiler:2.7'
2) Создать пустой тестовый класс NetworkUtils
:
public class NetworksUtils {
}
3) Создайте для него модуль:
@Module
public class NetworksModule {
@Provides
NetworksUtils provideNetworksUtils() {
return new NetworksUtils();
}
}
4) Создайте интерфейс «подключения»:
import dagger.Component;
@Component(modules = NetworksModule.class)
public interface AppComponent {
void injectsHomeActivity(HomeActivity homeActivity);
}
5) Создайте App
класс.Я не совсем понимаю, почему я это сделал (преподавание в путеводителе), точно не понимаю, почему мне нужно продлить на Application
.Может быть, создать все компоненты при запуске приложения.DaggerAppComponent
красного цвета, из-за сбоя при сборке этот класс еще не создан.
public class App extends Application {
private static AppComponent component;
@Override
public void onCreate() {
super.onCreate();
component = DaggerAppComponent.create();
}
public static AppComponent getComponent() {
return component;
}
}
6) Добавьте App
в манифест:
<application
android:name="com.example.animalslibrary.ui.App"
...
7) Сейчася пишу свой HomeActivity
класс ...
public class HomeActivity extends AppCompatActivity implements
HomeContract.View {
...
@Inject
private NetwotkUtils netwotkUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
...
App.getComponent().injectsHomeActivity(this);
...
}
8) ... и отключается при попытке построить проект.
Я думаю, что моя ошибка о App
, но яне могу понять, где и как это исправить.
UPD:
Эта модификация не помогла:
public class NetwotkUtils {
@Inject
public NetwotkUtils() {
}
}