我在尝试将SharedPreference注入ViewModel时遇到问题,我正在使用dagger进行依赖项注入。我将在下面添加代码的主要部分
模块共享偏好模块.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();
我得到的错误在下面给出
错误:@Subcomponent.Factory方法缺少所需模块或子组件的参数:
我知道SharedPreferencesModule中的构造函数导致了错误,并且由于该模块是使用ContributesAndroidInjector添加的,因此我无法将上下文传递给SharedPreferencesModule。但我需要它来获得SharedPreferences
有什么办法解决这个问题吗。
下面给出了我的基本应用程序代码
public class BaseApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent
.builder()
.application(this)
.build();
}
}
开发的参考是来自这个链接Youtube链接
任何帮助都将不胜感激,因为我已经花了一整天的时间。
注意:我可以使用任何替代解决方案,但我不能破坏这个项目结构
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);
}
}