我在Kotlin上使用Dagger 2。一切正常,但是当我尝试向活动注入SharedPreferences时,我的项目甚至都没有创建。 Gradle控制台说:
di \ AppComponent.java:6:错误: [dagger.android.AndroidInjector.inject(T)] android.content.SharedPreferences不可为空,但正在 由@ org.jetbrains.annotations.Nullable提供 @ android.support.annotation.Nullable @Singleton @Provides android.content.SharedPreferences myapp.di.Modules.SharedPrefModule.providePreferences(android.content.Context) e:
e:公共抽象接口AppComponent {e:^ e:
在:android.content.SharedPreferences注入到e:
myapp.mvp.StartScreen.StartActivity.sharedPref e:
myapp.mvp.StartScreen.StartActivity已插入e:
dagger.android.AndroidInjector.inject(arg0)e: java.lang.IllegalStateException:无法分析: org.jetbrains.kotlin.kapt3.diagnostic.KaptError:时出错 注释处理
SharedPreferencesModule:
JOAmR
JOHN HOMR
AppComponent:
@Module
class SharedPrefModule{
@Provides
@Singleton
fun providePreferences (context : Context): SharedPreferences? {
return context.getSharedPreferences(SHARED_PREFERENCES_SETTINGS, Context.MODE_PRIVATE)
}
}
应用程序:
@Singleton
@Component(modules=arrayOf(AppModule::class, AndroidSupportInjectionModule::class,
SharedPrefModule::class, ActivityBuilder::class))
interface AppComponent {
fun inject (app:App)
@Component.Builder
interface Builder {
@BindsInstance
fun application(context: Application): Builder
fun build(): AppComponent
}
}
活动:
class App : Application(),HasActivityInjector {
@Inject
lateinit var activityInjector : DispatchingAndroidInjector<Activity>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder().build().inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
}
答案 0 :(得分:0)
SharedPrefModule使用上下文来创建SharedPreferences实例,并且由于您不包括任何提供上下文的模块,因此Dagger可能无法创建SharedPreferences实例。