我想集成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() {
}
}
答案 0 :(得分:1)
您的代码有两个问题,一个导致您得到错误。
component = DaggerAppComponent.create();
p1的示例:
DaggerAppComponent.builder()
.networkModule(new NetworkModule())
.build()