Menggunakan Retrofit HTTP Client untuk pembuatan aplikasi Android dengan bahasa Kotlin

Idham Muhamad Irfani
Binar Academy
Published in
3 min readJan 3, 2019
Photo by rawpixel on Unsplash

Dalam pembuatan aplikasi Android secara umum tentunya pasti ada permintaan data dari server yang terjadi, salah satu library yang cukup bagus untuk menghandle proses tersebut yaitu menggunakan Retrofit. Retrofit merupakan sebuah HTTP client yang mana kita dapat mengubah API yang dibutuhkan dalam satu class interface, sehingga pembuatan code menggunakan Retrofit dapat lebih jelas dan rapi. Hal ini saya pelajari dari mentor saya saat belajar di Binar Academy. Baiklah langsung saja langkah-langkah menggunakan Retrofit dalam pembuatan aplikasi Android :

Tambahkan dependencies

Tambahakan code library dibawah ini pada build.gradle level app di aplikasi yang akan kita buat

implementation 'com.squareup.retrofit2:retrofit:2.4.0'    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'    implementation 'com.squareup.okhttp3:okhttp:3.10.0'    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'

Buat class model untuk menghandle response data dari server

Disini saya menggunakan API dari TheSportsDB yang dapat diakses disini. Sebagai contoh saya ingin mendapatkan daftar team yang ada pada Premier League yang mana mendapatkan response data dalam format JSON seperti ini. Maka kita perlu membuat 2 class model seperti berikut :

Class TeamResponse.kt

data class TeamResponse(
@SerializedName("teams")
val teams: List<Team>
)

Class Team.kt

data class Team(
@SerializedName("idTeam")
var teamId: String? = null,

@SerializedName("strTeam")
var teamName: String? = null,

@SerializedName("strSport")
var teamSport: String? = null,

@SerializedName("strTeamBadge")
var teamBadge: String? = null,

@SerializedName("strDescriptionEN")
var teamDesc: String? = null,

@SerializedName("intFormedYear")
var teamFormedYear: String? = null,

@SerializedName("strStadium")
var teamStadium: String? = null,

@SerializedName("strStadiumThumb")
var teamStadiumImage: String? = null
)

Untuk variabel pada class Team dapat ditambahkan sesuai kebutuhan

Buat class API Main

Class ini digunakan untuk meng-inisialisasikan service retrofit yang akan kita panggil. Karena biasanya setiap activity akan memerlukan pengambilan data dari server maka kita dapat meng-extend class ini dengan Application() , contoh codenya seperti berikut :

class ApiMain : Application() {
private val client = OkHttpClient().newBuilder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
})
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build()
private val retrofit = Retrofit.Builder()
.baseUrl("https://www.thesportsdb.com/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
val services: ApiServices = retrofit.create(ApiServices::class.java)
}

Tambahkan juga code berikut pada AndroidManifest.xml karena classApiMain.kt turunan class Application

<application
android:name=".data.api.ApiMain" //code yg ditambahkan
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

Buat class API Interface

Class ini digunakan untuk menghandle semua API yang kita butuhkan, sebagai contoh untuk API Get List All Teams dapat kita tulis seperti di bawah ini :

interface ApiServices {
@GET("api/v1/json/1/lookup_all_teams.php")
fun getAllTeam(@Query("id") id: String?): Call<TeamResponse>
}

Get data melalui Activity yang dibutuhkan

Terakhir untuk mendapatkan data list team, kita dapat memanggilnya dengan menuliskan code di bawah ini :

ApiMain().services.getAllTeam("4328").enqueue(object : 
Callback<TeamResponse> {
override fun onResponse(call: Call<TeamResponse>, response: Response<TeamResponse>) {
//Tulis code jika response sukses
if(response.code() == 200) {
response.body()?.teams?.let {
showTeamList(it) //it return List<Team>
}
}
}
overrude fun onFailure(call: Call<TeamResponse>, t: Throwable){
//Tulis code jika response fail
}
})

Jadi kurang lebih seperti itulah cara menggunakan Retrofit untuk memanggil data dari server pada pembuatan aplikasi Android, untuk info lebih lanjut mengenai retrofit dapat dilihat di sini. Terimakasih :D

--

--