LoginSignup
1
0

Android+RetrofitでHTTP通信するアプリの作り方(その3)

Posted at

Depnedency Inejectionの活用

前回の記事でHiltを導入しました。

今回の記事ではHiltを使ってInjectするように組んでいきます。

目次

通信層をInjectする

実際にInjectしてみましょう。

現在のところ、このアプリの機能はJsonPlaceHolderと通信することだけです。

なので、JsonPlaceHolderと通信する機能をInjectするように修正します。

Modules

InjectするインスタンスはModuleに定義します。

@Module
@InstallIn(SingletonComponent::class)
object ApplicationModule {

    /**
     * Retrofitのインスタスを供給する
     * urlはhttps://jsonplaceholder.typicode.com/、converterはGson
     */
    @Provides
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }

    /**
     * RetrofitのインスタンスからJsonPlaceHolderAPIインターフェイスのインスタンスを生成し供給する
     */
    @Provides
    fun provideJsonPlaceHolderAPI(
        retrofit: Retrofit
    ): JsonPlaceHolderAPI{
        return retrofit.create<JsonPlaceHolderAPI>()
    }
}

@Inject

MainActivityjsonPlaceHolderをInjectするように修正します。

  1. 以下は削除する
    @AndroidEntryPoint
    class MainActivity : ComponentActivity() {
        ...
        // ここから削除
        private val retrofit = Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        // ここまで削除
        ...
    }
    
  2. jsonPlaceHolderAPIをInjectするよう修正
    @AndroidEntryPoint
    class MainActivity : ComponentActivity() {
        ...
        @Inject
        lateinit var jsonPlaceHolderAPI: JsonPlaceHolderAPI
        ...
    }
    

できあがり

MainActivityがだいぶすっきりしました。

リポジトリ

https://github.com/aburagirio/retrofitExample.git

ブランチpart3をcheck outしてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0