我正在尝试将CacheManager
的实例注入GetTodoRepository
,Dagger可能会成功完成,因为我没有收到任何与Dagger相关的错误。但是当在cacheManager
中使用GetTodoRepository
时,我得到了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)应用程序类中的设置匕首(组件)
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)从注入目标类的Component
类调用Application
对象
public GetTodoRepository(@NonNull ResultListener listener) {
this.listener = listener;
TodoApplication.getAppComponent().inject(this);
}