Menggunakan Retrofit HTTP Client untuk pembuatan aplikasi Android dengan bahasa Kotlin
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