我在我的类上添加注入后出现此错误,然后它给我一个编译错误。 如果我删除
@Inject static ApiService mApiService;
它工作正常
我使用2 Application类扩展MultidexApplication因为我有合并2应用程序首先使用dagger2而第二个应用程序是butterknife并且两个目录结构都是不同的并且两个应用程序相互依赖地工作正常但是在合并代码应用程序之后不编译并给出DaggerAppComponent错误!
请帮我们解决我的问题
我遵循以下结构
@ActivityScope
@Component(dependencies = AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
@Singleton
@Component(modules = {ApplicationModule.class, ApiModule.class})
public interface AppComponent {
Context appContext();
Config config();
ApiService apiService();
}
@Module
public class ActivityModule {
private final Activity mActivity;
public ActivityModule(Activity activity){
mActivity = activity;
}
@Provides
public Context activityContext(){
return mActivity;
}
}
@Module
public class ApiModule {
@Provides
@Singleton
public ApiService apiService(){
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
return new Retrofit.Builder()
.baseUrl(Config.API_URL)
.addConverterFactory(JacksonConverterFactory.create(mapper))
.client(client)
.build()
.create(ApiService.class);
}
}
@Module
public class ApplicationModule {
private final App mApp;
public ApplicationModule(App app) {
mApp = app;
}
@Provides
@Singleton
public Context appContext() {
return mApp;
}
@Provides
@Singleton
public Config config() {
return new Config(mApp);
}
}
@Scope
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityScope {
}
public class App extends BrowserApp {
private AppComponent mAppComponent;
@Override
public void onCreate() {
super.onCreate();
mAppComponent = DaggerAppComponent.builder().applicationModule(new ApplicationModule(this)).build();
}
public AppComponent getAppAppComponent() {
return mAppComponent;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
答案 0 :(得分:8)
就我而言,我尝试过:
对我而言,唯一帮助我的是打开控制台“ 构建”,单击“ 切换视图”(位于控制台左侧和下方)锤子),然后修复该屏幕上显示的错误。
答案 1 :(得分:5)
有这个问题。在我的情况下,我忘了把@Singelton放在所有组件类之上。
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
...
}
答案 2 :(得分:5)
只是为了帮助那些像我一样寻求解决此问题的人,在应用的build.gradle
模块中包含以下行(替换现有的dagger2
依赖关系)
// Dagger 2
implementation "com.google.dagger:dagger-android-support:2.11"
implementation "com.google.dagger:dagger:2.11"
annotationProcessor "com.google.dagger:dagger-compiler:2.11"
答案 3 :(得分:5)
如果找不到符号类DaggerAppComponent转到: \ app \ build \ generated 文件夹并删除它,而不是重建项目。
答案 4 :(得分:1)
你试过这个吗?
@ActivityScope
@Component(modules = ActivityModule.class, dependencies =
AppComponent.class)
public interface ActivityComponent extends AppComponent {
void inject(SignInActivity activity);
}
答案 5 :(得分:1)
在我的情况下,DaggerAppComponent
未生成,因为我在子模块中包含了dagger2依赖项。我从那里删除了依赖项,主应用程序模块中的它们解决了这个问题。
答案 6 :(得分:1)
我遇到了这样的问题,由于 kotlin 和 java 的混合代码。 尝试为 kotlin 添加依赖项
//dagger
implementation 'com.google.dagger:dagger:2.31'
annotationProcessor 'com.google.dagger:dagger-compiler:2.31'
kapt 'com.google.dagger:dagger-compiler:2.31' //for Kotlin
答案 7 :(得分:0)
在我的情况下,我向SomeModule添加了类似于Kotlin模块的内容:
@SomeScope
@Provides
internal fun providesSomeService(activity: MainActivity): SomeServiceProvider {
return SomeServiceProviderImpl(activity)
}
删除它并得到另一个错误,然后修复它。所以,使用Git来理解出了什么问题。在Kotlin中,您必须将@Binds
和@Provides
方法分离到不同的模块。
答案 8 :(得分:0)
我在gradle.properties中添加了以下内容:-
-Pandroid.incrementalJavaCompile=false
对我有用
答案 9 :(得分:0)
将kotlin-kapt
引入项目时,我遇到了类似的错误。
从kotlin-kapt
中删除build.gradle
以及任何kapt ...
依赖关系都使我受益匪浅。
答案 10 :(得分:0)
我遇到了同样的问题。 对我有用的解决方案是:
我有 2 个组件文件,
@Singleton
@Component(modules = {RoomModule.class})
public interface RoomComponent {
void inject(SampleScreen sampleScreen);
}
@Singleton
@Component(modules = {AppModule.class,RetrofitModule.class})
public interface RetrofitComponent {
void inject(SampleScreen sampleScreen);
}
而我只通过注射一个
DaggerRetrofitComponent.builder().retrofitModule(new RetrofitModule(URL2)).build().inject(this);
所以我注释掉了另一个(RoomComponent)注入声明,然后它就起作用了。
答案 11 :(得分:0)
更新到最新版本的 Dagger 对我有用:
{{1}}