Android之Dagger2使用,全面讲解各种可能遇到的报错

Dagger2

先给大家讲讲博主的辛酸历程,第一次使用时我的AS版本是3.6.2当时使用dagger就一直出不来下面这条语句(记好了,写完一定要编译一下)

DaggerFoodCompontent.builder().foodModules(new FoodModules(this)).build().injectFoodActivity(this);

然后老师说是版本问题,然后就降了版本,当时没什么问题,后来使用过SVN,然后至关重要的一点,我当时在这里配置了代码忽略(现在是取消配置的)
Android之Dagger2使用,全面讲解各种可能遇到的报错_第1张图片

这一步就会让app目录下的build文件消失
Android之Dagger2使用,全面讲解各种可能遇到的报错_第2张图片
消失之后,你无论怎么编译也不会出来,在取消忽略后终于重见天日.

接下来给大家总结一下可能会犯的错误

1.写完之后没有编译
2.配置过代码忽略
3.如果使用了base基类,是否在此添加Inject
Android之Dagger2使用,全面讲解各种可能遇到的报错_第3张图片4.继承base基类时一定不要忘加泛型,否则他会报找不到符号
Android之Dagger2使用,全面讲解各种可能遇到的报错_第4张图片

5.导入依赖时的问题,如果你使用了lib包的形势,那么你一定要在下面再次添加一下dagger2的依赖
Android之Dagger2使用,全面讲解各种可能遇到的报错_第5张图片
接下来给大家说一下简单使用,这里博主就直接吧练习时使用的粘上了

导入依赖

api 'com.google.dagger:dagger:2.17'
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'

需要实例化的类

public class FoodModel extends BaseModel implements FoodContract.Model {
	//注解,一定要是public的构造
    @Inject
    public FoodModel(){}

}

创建modules类

//创建一个modules,这个注解是指明它是module
@Module
public class LoginModules {
	
    private LoginContract.View mView;

    public LoginModules(LoginContract.View mView) {
        this.mView = mView;
    }
	//Provides用Provides来标注一个方法,
	//该方法可以在需要提供依赖时被调用,从而把预先提供好的对象当做依赖给标注@Injection的变量赋值。
    @Provides
    public LoginContract.View provideLoginView() {
        return mView;
    }

    @Provides
    public LoginContract.Model provideLoginModel(LoginModel loginModel) {
        return loginModel;
    }

}

创建一个commponent接口

//这个地方一定不要忘记添加,括号里的如果忘记添加,也会报找不到符号
@Component(modules = FoodModules.class)
public interface FoodCompontent {

    void injectFoodActivity(FoodActivity foodActivity);

}

这里我提供的只是一个简单的使用,主要是记录一下自己的犯过的错,最后编译一下,就可以调用这句话啦

DaggerFoodCompontent.builder().foodModules(new FoodModules(this)).build().injectFoodActivity(this);

你可能感兴趣的:(安卓,安卓,android,studio)