更新:链接到项目-> https://drive.google.com/open?id=1D8mYZL3Pb8FezPp5FOKA20-Um5kTRYxH
我从Dagger开始学习,然后按照本教程进行操作,直到第5.4步:https://www.vogella.com/tutorials/Dagger/article.html#special-treatment-of-fields-in-dagger
我添加了以下依赖项:
api 'com.google.dagger:dagger:2.20'
api 'com.google.dagger:dagger-android:2.20'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.20'
annotationProcessor 'com.google.dagger:dagger-compiler:2.20'
compileOnly 'javax.annotation:jsr250-api:1.0'
但是IDE无法解析“ DaggerMyApplicationComponent”(在onCreate()中)。好像Dagger无法生成代码。
MyApplication.java
import android.app.Activity;
import android.app.Application;
import javax.inject.Inject;
import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
public class MyApplication extends Application implements HasActivityInjector {
@Inject
DispatchingAndroidInjector<Activity> dispatchingAndroidInjector;
@Override
public void onCreate() {
super.onCreate();
DaggerMyApplicationComponent.create().inject(this);
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
return dispatchingAndroidInjector;
}
}
AndroidManifest.xml :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.parassidhu.daggerkumar">
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MyApplicationModule.java :
import dagger.Module;
import dagger.android.ContributesAndroidInjector;
@Module
public abstract class MyApplicationModule {
@ContributesAndroidInjector
abstract MainActivity contributeActivityInjector();
}
MyApplicationComponent.java :
import javax.inject.Singleton;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;
@Singleton
@Component(modules = {AndroidInjectionModule.class, MyApplicationModule.class})
public interface MyApplicationComponent extends AndroidInjector<MyApplication> {
}
请提出可能出问题的地方。我已经尝试过几次“制作项目”,“清理”,“重建”,“无效”和“重新启动”,但是没有帮助。
答案 0 :(得分:1)
如评论中所述,从gradle中删除所有不必要的kotlin依赖项和插件。如果您的项目中没有kotlin代码,则将模块称为kotlin模块是没有意义的。 Dagger认为它应该生成kotlin代码,但它没有kotlin编译器来执行。因此,要么将整个代码更改为kotlin并使用kotlin依赖项,要么坚持使用Java并删除所有kotlin依赖项。
答案 1 :(得分:-1)
我已经解决了这个问题。解决方案很奇怪。我将依赖项更改为:
api 'com.google.dagger:dagger:2.20'
api 'com.google.dagger:dagger-android:2.20'
kapt 'com.google.dagger:dagger-android-processor:2.20'
kapt 'com.google.dagger:dagger-compiler:2.20'
总体而言,我使用kapt
而不是annotationProcessor
,然后清洁项目和进行项目,繁荣起来!奏效了。
现在出现了奇怪的部分。尽管在项目中配置了Kotlin,但我的项目中没有一个Kotlin文件(默认的测试除外)。如果有人可以了解它,将不胜感激。
希望有帮助!