我正在使用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之间是否存在不兼容性吗?
答案 0 :(得分:2)
组件有两种提供依赖关系的方法:
提供方法 返回注入或提供的类型。
这是一个提供方法的示例。请注意,这是一种简单地返回依赖关系的方法,在本例中为OKHttpClient
。
OkHttpClient httpClient();
成员注入方法,将依赖项注入特定类型。
这是成员注入方法的一个例子。请注意,它需要一个参数,这是将注入其依赖项的类型(在本例中为MainActivity
:
void inject(MainActivity activity);
您可以在Dagger 2 @Component javadocs了解有关组件的更多信息。
您的问题是void injectPresentationFragmentPresenter();
不是这些。它不会返回任何内容,因此它不是一种提供方法。它也不需要参数,因此它不能成为成员注入方法。根据方法的命名和帖子的其余部分,我猜测你想要的是如此定义方法:
void injectPresentationFragmentPresenter(PresentationFragmentPresenter presenter);