Page cover image

Configurar Retrofit en un proyecto Android con Koin

1

Añadir las dependencias

Agrega las dependencias necesarias en tu archivo build.gradle (nivel de módulo):

implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
2

Configura Koin

Crea un módulo donde se configurará Retrofit para realizar las solicitudes HTTP.

di.RetrofitModule.kt
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.create

val retrofitModule = module {
    // API retrofit
    single {
        Retrofit.Builder()
            // Se configura la URL del servicio REST
            // La IP 10.0.2.2 hace referencia la ip del host del emulador
            .baseUrl("http://10.0.2.2:8080"")
            // Se configura la serialización con JSON
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
}
3

Actualiza la clase Application para que use el módulo de Retrofit

import android.app.Application
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        startKoin() {
            androidContext(this@MyApp)
            modules(
                appModule,
                retrofitModule
            )
        }
    }
}
4

Configura AndroidManifest.xml

Por defecto, Android no permite las comunicaciones no encriptadas. Para poder comunicarnos con la API REST tenemos dos opciones:

  • Habilitar las comunicaciones no encritpadas, añade la entrada usesCleartextTraffic

    <application
        android:name=".MyApp"
        
        android:usesCleartextTraffic="true"
        
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        ....
        >
        

Además, hay que añadir el siguiente permiso antes de application

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:name=".MyApp"
        ...
        >

Última actualización

¿Te fue útil?