Класс с добавленным кинжалом остается нулевым с Dagger - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь внедрить экземпляр CacheManager в GetTodoRepository, что Даггер, вероятно, успешно выполнил, так как я не получаю никаких ошибок, связанных с кинжалом. Но при использовании 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 Ответ

0 голосов
/ 26 января 2020

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);
}
...