如何在 android java 中使用 Dagger2 将 SharedPreferences 注入 ViewModel
How to inject SharedPreferences to a ViewModel using Dagger2 in android java
我在尝试将 SharedPreference 注入 ViewModel 时遇到问题,我正在使用 Dagger 进行依赖注入。我将在下面添加代码的主要部分
模块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();
我得到的错误如下
error: @Subcomponent.Factory method is missing parameters for required modules or subcomponents:
我知道 SharedPreferencesModule 中的构造函数导致了错误,并且由于模块是使用 ContributesAndroidInjector 添加的,所以我无法将上下文传递给 SharedPreferencesModule。但我需要它来获得 SharedPreferences
有什么办法可以解决这个问题。
我的BaseApplication代码如下
public class BaseApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent
.builder()
.application(this)
.build();
}
}
开发的参考来自这个linkYoutube 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);
}
}
我在尝试将 SharedPreference 注入 ViewModel 时遇到问题,我正在使用 Dagger 进行依赖注入。我将在下面添加代码的主要部分
模块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();
我得到的错误如下
error: @Subcomponent.Factory method is missing parameters for required modules or subcomponents:
我知道 SharedPreferencesModule 中的构造函数导致了错误,并且由于模块是使用 ContributesAndroidInjector 添加的,所以我无法将上下文传递给 SharedPreferencesModule。但我需要它来获得 SharedPreferences
有什么办法可以解决这个问题。
我的BaseApplication代码如下
public class BaseApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent
.builder()
.application(this)
.build();
}
}
开发的参考来自这个linkYoutube 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);
}
}