[英]How to inject SP via Dagger 2.11 with Kotlin?
我正在將Dagger 2與Kotlin一起使用。 一切正常,但是當我嘗試向活動注入SharedPreferences時,我的項目甚至都沒有創建。 Gradle控制台說:
di \\ AppComponent.java:6:錯誤:[dagger.android.AndroidInjector.inject(T)] android.content.SharedPreferences不能為空,但由@ org.jetbrains.annotations.Nullable @ android.support.annotation提供.Nullable @Singleton @提供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在以下位置注入:
dagger.android.AndroidInjector.inject(arg0)e:java.lang.IllegalStateException:無法分析:org.jetbrains.kotlin.kapt3.diagnostic.KaptError:批注處理時出錯
SharedPreferencesModule:
@Module
class SharedPrefModule{
@Provides
@Singleton
fun providePreferences (context : Context): SharedPreferences? {
return context.getSharedPreferences(SHARED_PREFERENCES_SETTINGS, Context.MODE_PRIVATE)
}
}
AppComponent:
@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
}
活動:
class StartActivity: AppCompatActivity(), HasActivityInjector {
@Inject
lateinit var activityInjector : DispatchingAndroidInjector<Activity>
@Inject
lateinit var sharedPref : SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
setContentView(R.layout.start_activity_layout)
// var data = sharedPref.getString(SHARED_PREFERENCES_SETTINGS, "")
// Log.d("tag", "data - $data")
}
override fun activityInjector(): AndroidInjector<Activity> = activityInjector
}
SharedPrefModule使用上下文來創建SharedPreferences實例,並且由於您不包括提供上下文的任何模塊,因此Dagger可能無法創建SharedPreferences實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.