如何在android java中使用Dagger2将SharedPreferences注入ViewModel



我在尝试将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图中已经有两个上下文:ApplicationDashboardActivity。要使用其中一个,只需将其作为依赖项添加到@Provides方法中即可。(如果您使用DashboardActivity,我建议先使用@Binds方法将其绑定到ActivityContext。(

例如,要使用图形中已经存在的Application绑定:

@Module
public class SharedPreferencesModule {
@Provides
public static SharedPreferences provideSharedPreferences(Application application) {
return application.getSharedPreferences("login",Context.MODE_PRIVATE);
}
}

相关内容

  • 没有找到相关文章

最新更新