问题描述
在尝试将SharedPreference注入到viewmodel时遇到问题,我正在使用匕首进行依赖项注入。我将在下面的代码中添加主要部分
Module SharedPreferencesModule.java
@Module
public class SharedPreferencesModule {
private Context context;
public SharedPreferencesModule(Context context) {
this.context = context;
}
@Provides
public SharedPreferences provideSharedPreferences() {
return this.context.getSharedPreferences("login",Context.MODE_PRIVATE);
}
}
添加了以下子组件
@DashScope
@ContributesAndroidInjector(
modules = {
DashboardFragmentBuildersModule.class,D
ashboardviewmodelsModule.class,DashboardModule.class,SharedPreferencesModule.class // Added Newly for injecting
}
)
abstract DashboardActivity contibuteDashboardActivity();
我得到的错误在下面给出
我了解到SharedPreferencesModule中的构造函数正在警告该错误,并且由于使用ContributesAndroidInjector添加了该模块,因此我无法将上下文传递给SharedPreferencesModule。但是我需要得到SharedPreferences
有什么办法可以消除这个问题。
我的BaseApplication代码在下面给出
public class BaseApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent
.builder()
.application(this)
.build();
}
}
开发的参考资料来自此链接Youtube Link
任何帮助将不胜感激,因为我已经花了一整天了。
注意:我可以使用任何其他解决方案,但不能破坏此项目结构
解决方法
Dagger图中已经有两个上下文:Application
和DashboardActivity
。要使用其中之一,只需将其作为依赖项添加到您的@Provides
方法中。 (如果您使用DashboardActivity
,建议您先使用@Binds
方法将其绑定到Activity
或Context
。)
例如,要使用图形中已经存在的Application
绑定:
@Module
public class SharedPreferencesModule {
@Provides
public static SharedPreferences provideSharedPreferences(Application application) {
return application.getSharedPreferences("login",Context.MODE_PRIVATE);
}
}