2017-07-08 10 views
3

私はRetrofitインターフェイスを提供するモジュールを持っています。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インスタンスを注入しようとすると、私は

別のエラーを取得するには、スタックトレースが見つからないjavax.annotation.Nullableのクラスファイルを示し

のNullableにアクセスすることはできません。

このエラーを参照しているものは見つかりませんでした。 12時間前から同じエラーが発生しているようだが、削除されたStackOverflow投稿があります。

https://stackoverflow.com/questions/44983292/cannot-access-nullable-on-injecting-with-dagger2-in-kotlin
+0

をあなたには、いくつかのより多くのエラーの詳細を追加してくださいすることができます。 – guenhter

+0

この解決策をお探しですか? – dazza5000

+0

私はあまり書いていないので、私は空白の新しいプロジェクトを作成したと思います。このプロジェクトはhttps://github.com/tpb1908/HNKotlin/tree/master/app/src/main/java/com/tpb/hnk/dagger –

答えて

0

IdServiceは@Providesまたは@Produces 注釈付きメソッドなしで提供することができません。

これは、IdServiceが存在する場合、依存関係を挿入していないためです。だから、ダガーはIdServiceをどのように提供するのか分かりません。

NetModuleは アプリケーションに注入し、アプリケーションのコンパニオン・オブジェクトに格納されNetComponentと共に使用されます。あなたは(ここではあなたのActivity)あなたはそれを使用したい依存関係を注入する

を持って

だから私はjavax.annotationを得ていたあなたの活動のOnCreate

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

内注射を書きます.Nullableアノテーションを含むfindbugsライブラリに追加することで修正できた.Nullable not foundエラー。

次の依存関係追加のGradleを使用している場合:

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

+0

短いバージョンを書くこともできます: 'implementation 'com.google.code.findbugs:jsr305:3.0.2'' –

関連する問題