Android 如何使用Kotlin通过Dagger 2.11注射SP?
我在用匕首2对付科特林。所有的工作都很好,但是当我试图将SharedReference注入到活动中时,我的项目甚至没有创建。 格雷德尔说: di\AppComponent.java:6:错误: [dagger.android.AndroidInjector.inject(T)] android.content.SharedReferences不可为null,但正在 由@org.jetbrains.annotations.Nullable提供 @android.support.annotation.Nullable@Singleton@提供 android.content.SharedReferences myapp.di.Modules.SharedPrefModule.ProvideReferences(android.content.Context) e: e:公共抽象接口AppComponent{e:^e:Android 如何使用Kotlin通过Dagger 2.11注射SP?,android,kotlin,dagger-2,Android,Kotlin,Dagger 2,我在用匕首2对付科特林。所有的工作都很好,但是当我试图将SharedReference注入到活动中时,我的项目甚至没有创建。 格雷德尔说: di\AppComponent.java:6:错误: [dagger.android.AndroidInjector.inject(T)] android.content.SharedReferences不可为null,但正在 由@org.jetbrains.annotations.Nullable提供 @android.support.annotation
在:android.content.SharedReferences在e:
myapp.mvp.StartScreen.StartActivity.SharedRef e:
myapp.mvp.StartScreen.StartActivity在e:
dagger.android.AndroidInjector.inject(arg0)e: java.lang.IllegalStateException:未能分析: org.jetbrains.kotlin.kapt3.diagnostic.kaptror:while时出错 注释处理 SharedReferences模块:
@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
}
}
应用程序:
类应用程序:应用程序(),HasActivityInjector{
@注入
lateinit var activityInjector:调度AndRoid Injector
重写fun onCreate(){
super.onCreate()
DaggerAppComponent.builder().build().inject(此)
}
重写fun activityInjector():AndroidInjector=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
}
class StartActivity:AppCompatActivity(),HasActivityInjector{
@注入
lateinit var activityInjector:调度AndRoid Injector
@注入
lateinit var sharedPref:SharedPreferences
重写创建时的乐趣(savedInstanceState:Bundle?){
雄激素注射。注射(这个)
super.onCreate(savedInstanceState)
setContentView(R.layout.start\u活动\u布局)
//var data=sharedPref.getString(共享首选项设置“”)
//Log.d(“标记”,“数据-$data”)
}
重写fun activityInjector():AndroidInjector=activityInjector
}
SharedPreferences模块使用上下文来创建SharedPreferences实例,由于您没有包括任何提供上下文匕首的模块,因此可能无法创建SharedPreferences实例。查看SharedPreferences?
和SharedPreferences
有什么区别
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
}