我想集成 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)创建“连接”接口(interface):
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
到 manifest:
<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
的错误,但我不明白在哪里以及如何修复它。
更新:
这个修改没有帮助:
public class NetwotkUtils {
@Inject
public NetwotkUtils() {
}
}
最佳答案
您的代码有两个问题,一个导致您遇到错误。
- 您必须在此处将模块包含到构建中
component = DaggerAppComponent.create();
- Dagger 不会注入(inject)私有(private)字段。
p1 的例子:
DaggerAppComponent.builder()
.networkModule(new NetworkModule())
.build()
关于Android,由于错误 “Activity cannot be provided without an @Inject constructor ” 无法集成 Dagger2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54955755/