你好Dagger2在Android Studio上崩溃
问题描述:
我在玩Dagger2以了解它是如何工作的。我刚刚创建了一个“hello dagger2”基本项目,但它崩溃你好Dagger2在Android Studio上崩溃
我有三个类:面包,面粉和水。面包依赖于面粉和水。
类面包:
public class Bread {
private Water water;
private Flour flour;
@Inject
public Bread (Water water, Flour flour){
this.water = water;
this.flour = flour;
}
}
类水:
public class Water {
int waterQuantity;
public Water(int waterQuantity){
this.waterQuantity = waterQuantity;
}
}
类面粉:
public class Flour {
private int flourQuantity;
public Flour(int flourQuantity){
this.flourQuantity = flourQuantity;
}
}
除了我已经实现的模块和部件
模块:
@Module
public class BreadModule {
@Provides @Singleton
Bread provideBread(Water water, Flour flour){
return new Bread(water, flour);
}
}
成分,它:
@Singleton
@Component (modules = {BreadModule.class})
public interface BreadComponent {
Bread getBread();
}
我面对的错误是:
Error:(13, 11) error: com.example.llisas.testingdagger2.model.Water cannot be provided without an @Inject constructor or from an @Provides-annotated method. com.example.llisas.testingdagger2.module.BreadModule.provideBread(com.example.llisas.testingdagger2.model.Water water, com.example.llisas.testingdagger2.model.Flour flour) [parameter: com.example.llisas.testingdagger2.model.Water water]
我做错了吗?
答
在试图提供Bread
时,Dagger2需要Water
和Flour
类型的对象。您需要在模块中添加@Provide方法,该方法提供了Water
和Flour
。
例如:
@Provides
Water provideWater() {
return new Water(1); // instead of 1, you can add any other default value
}
如果在该方法中的整数,则必须提供一个为好,如下图所示:
@Provides @Named("defaultWaterQuantity")
int provideWaterQuantity() {
return 1;
}
@Provides
Water provideWater(@Named("defaultWaterQuantity") int waterQuantity){
return new Water(waterQuantity);
}
谢谢,同时制作了方法,接收的整数(数量作为参数)和其他错误得到。提供Singleton Water provideWater(int quantity){ return new Water(quantity); } – JoCuTo
错误:(13,11)错误:无法使用Inject构造函数或提供注释的方法提供java.lang.Integer。 (com.example.llisas.testingdagger2.model.Water water,com.example.llisas.testingdagger2.model.Flour flour) [参数: .testingdagger2.model.Water水] com.example.llisas.testingdagger2.module.BreadModule.provideWater(INT数量) [参数:INT数量] – JoCuTo
只要你的方法有参数(在这种情况下,整数),你会需要继续提供它们直到提供方法没有参数。对于整数,你必须添加@Name(“description”)注释来区分你正在提供的不同类型的整数 – AgileNinja