Intereting Posts
supportActionBar имеет значение null, используя Kotlin Android всегда Масштабирование детского представления имеет одинаковую высоту nullPointerException на вспомогательном классе sharedpreferences При запуске теста Как получить имена и значения параметров метода? Решение основного наследования Котлина Как добавить новый источник с помощью gradle kotlin-dsl Случайное переопределение: следующие объявления имеют одну и ту же подпись JVM SQL-регистрация с открытым весной загрузки Не может быть предоставлен без @ Предоставляет-аннотированный метод ошибка в передаче данных в андроид Kotlin start Application crash Каков правильный способ добавления абстрактного частного получателя и публичного сеттера? Целевые аннотации с использованием сайта недоступны с отражением Котлина Первоначальная инициатива класса Kotlin с аспектом Есть ли какая-либо ссылка на временную сложность библиотеки коллекции Kotlin?

Dagger2 не может получить доступ к nullable. javax.annotation.Nullable не найден

У меня есть модуль для обеспечения интерфейса для модернизации.

@Module class NetModule(val base: String) { @Provides @Singleton fun provideOkHttpClient(): OkHttpClient { return OkHttpClient.Builder() .addInterceptor(object: Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val request = chain.request() info("Request for ${request.url()}") return chain.proceed(request) } }).build() } @Provides @Singleton fun provideGson(): Gson { return GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setPrettyPrinting() .setLenient() .create() } @Provides @Singleton fun provideRetrofit(OkHttpClient: OkHttpClient, Gson: Gson): Retrofit { return Retrofit.Builder() .baseUrl(base) .client(OkHttpClient) .addConverterFactory(GsonConverterFactory.create(Gson)) .addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync()) .build() } @Provides @Singleton fun provideIdService(Retrofit: Retrofit): IdService { return Retrofit.create(IdService::class.java) } } 

NetModule используется с NetComponent

 @Singleton @Component(modules = arrayOf(NetModule::class)) interface NetComponent { fun inject(application: Application) fun inject(activity: Activity) } 

Который вводится в приложение и сохраняется в объекте компаньона приложений.

 netComponent = DaggerNetComponent.builder().netModule(NetModule("some_url")).build() netComponent.inject(this) 

В Деятельности я тогда

 @Inject lateinit var idService: IdService 

Это дает ошибку сборки

IdService не может быть предоставлен без @Provides или @Produces аннотированного метода.

Если я попытаюсь Retrofit экземпляр Retrofit вместо этого, я получаю другую ошибку

недоступен Nullable

В стеке отображается файл класса для javax.nnotation.Nullable не найден.

Я не смог найти ничего, ссылаясь на эту ошибку. Есть сообщение StackOverflow от 12 часов назад, которое, похоже, имеет ту же ошибку, но оно было удалено. https://stackoverflow.com/questions/44983292/cannot-access-nullable-on-injecting-with-dagger2-in-kotlin

Я получал javax.annotation.Nullable не найденную ошибку, которую я смог исправить, добавив в библиотеку findbugs, которая содержит аннотацию Nullable.

Если вы используете gradle, добавьте следующую зависимость:

compile group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2'

IdService не может быть предоставлен без @Provides или @Produces аннотированного метода.

Это связано с тем, что вы не IdService свою зависимость, где присутствует IdService . Так кинжал не знает, как обеспечить IdService .

NetModule используется с NetComponent, который вводится в приложение и сохраняется в объекте компаньона приложений.

Вы должны вводить зависимости, в которых вы хотите его использовать (здесь ваша Activity )

Поэтому напишите инъекцию в OnCreate вашей деятельности

 netComponent = DaggerNetComponent.builder() .netModule(NetModule("some_url")) .build() .inject(this)