Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用Kotlin通过Dagger 2.11注射SP?_Android_Kotlin_Dagger 2 - Fatal编程技术网

Android 如何使用Kotlin通过Dagger 2.11注射SP?

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

我在用匕首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.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
}