DataDinding和Dagger2出错

时间:2016-11-10 15:30:49

标签: android dagger-2 android-databinding

我正在使用DataBinding开发一个项目但是在添加Dagger2并实现Module,Component和graft之后我遇到了这个错误:

  

错误:(8,74)错误:包com.anda.soft.app.databinding没有   存在
   错误:(16,13)错误:找不到符号类ActivityMainBinding
   错误:任务':app:compileDebugJavaWithJavac'的执行失败。    java.lang.IllegalArgumentException:不是有效的组件方法:injectPresentationFragmentPresenter()

这是我的模块:

for (int i = 0; i < 600; i++)
            {
                Mat avgImg(480, 640, CV_32FC3, Scalar());
                for (framenumb = 15 * i; framenumb < (15 * i) + 15; ++framenumb)
                {
                    cv::accumulate(images[framenumb], avgImg);
                }
                //stacking every 15 images into a single image
                avgImg = avgImg / 15;
                avgImg.convertTo(avgImg, CV_8UC3);
                char filename[80];
                sprintf(filename, "C:/AvgPics/test_%d.jpeg", framenumb);
                imwrite(filename, avgImg);

我的成就:

@Module
public class Modul {

    private Context context;


    public Modul(Context context){
        this.context = context;
    }

    @Provides
    public MainActivity provideMainActivity(){
        return new MainActivity();
    }

    @Provides
    public PresentationFragmentPresenter providePresentationFragment(){
        return new PresentationFragmentPresenterImp(provideMainActivity());
    }

}

和图

@Component (modules = Modul.class )

public interface Compoment {
 void injectPresentationFragmentPresenter();
}

最后我的MainActivity

public class App extends Application {

    private Compoment mCompoment;

    @Override
    public void onCreate() {
        super.onCreate();

        setUpGraph();
    }

    private void setUpGraph() {
        mCompoment = DaggerCompoment.builder()
                .modul(new Modul(this))
                .build();
    }


    public Compoment getCompoment(){
        return mCompoment;
    }
}

我做错了什么?你知道Dagger和DataBinding之间是否存在不兼容性吗?

1 个答案:

答案 0 :(得分:2)

组件有两种提供依赖关系的方法:

提供方法 返回注入或提供的类型。

这是一个提供方法的示例。请注意,这是一种简单地返回依赖关系的方法,在本例中为OKHttpClient

OkHttpClient httpClient();

成员注入方法,将依赖项注入特定类型。

这是成员注入方法的一个例子。请注意,它需要一个参数,这是将注入其依赖项的类型(在本例中为MainActivity

void inject(MainActivity activity);

您可以在Dagger 2 @Component javadocs了解有关组件的更多信息。

您的问题是void injectPresentationFragmentPresenter();不是这些。它不会返回任何内容,因此它不是一种提供方法。它也不需要参数,因此它不能成为成员注入方法。根据方法的命名和帖子的其余部分,我猜测你想要的是如此定义方法:

void injectPresentationFragmentPresenter(PresentationFragmentPresenter presenter);