gpt4 book ai didi

java - Dagger 注入(inject)的类在 Dagger 中保持为 null

转载 作者:行者123 更新时间:2023-12-01 18:42:03 25 4
gpt4 key购买 nike

我正在尝试将 CacheManager 的实例注入(inject) GetTodoRepository 中,Dagger 可能会成功执行此操作,因为我没有收到任何与 dagger 相关的错误。但是当在 GetTodoRepository 中使用 cacheManager 时,我得到一个 NullPointerException

public class GetTodoRepository {

@Inject
public CacheManager cacheManager;

public RetrofitService retrofitService;
private ResultListener listener;

public GetTodoRepository(@NonNull ResultListener listener) {
this.retrofitService = new RetrofitService();
this.listener = listener;
}
}

@Module
public class AppModule {

private Application application;

public AppModule(Application application) {
this.application = application;
}

@Provides
@Singleton
public Context providesApplicationContext() {
return application.getApplicationContext();
}

@Provides
@Singleton
public CacheManager provideCacheManager(Context Context) {
return new CacheManager(Context);
}

}



@Singleton
@Component(modules = AppModule.class)
public interface TodoComponents {
void inject(MainViewModel mainViewModel);
void inject(CacheManager cacheManager);
void inject(GetTodoRepository getTodoRepository);
void inject(PostTodoRepository postTodoRepository);
}

最佳答案

1)在Application类中设置Dagger(组件)

public class TodoApplication extends Application {

private static AppComponent components;

@Override
public void onCreate() {
super.onCreate();
components = DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}


public static AppComponent getAppComponent() {
return components;
}

}

2) 从注入(inject)目标类中的Application类调用Component对象

public GetTodoRepository(@NonNull ResultListener listener) {
this.listener = listener;
TodoApplication.getAppComponent().inject(this);
}

关于java - Dagger 注入(inject)的类在 Dagger 中保持为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com