Last Updated on 9 years by Mas Herdi
Halo semua. 😀 Kali ini kita akan belajar melakukan HTTP network request (REST API) menggunakan Retrofit 2 di Android. Untuk awalnya kita akan belajar menggunakan HTTP GET dulu, yang simpel, sederhana dan tanpa parameter :). Kita hanya perlu menembak sebuah URL. Sedangkan data JSON yang akan kita konsumsi diambil dari randomuser.me, sebuah web service yang menyediakan JSON API secara gratis.
Sebelum kita melanjutkan ke cara menggunakan Retrofit 2 untuk REST API, adakah yang belum tau tentang Retrofit? Retrofit adalah library REST client untuk Android yang mengubah API endpoint kalian menjadi sebuah Java interface API service. Pada awal pembelajaran memang terlihat kompleks, namun jika kalian sudah terbiasa pasti kalian akan sadar kegunaan dari Retrofit dan fleksibilitasnya yang memudahkan kita untuk membuat custom service sesuai yang kita inginkan. Retrofit sudah terkenal dan banyak digunakan di aplikasi-aplikasi Android yang populer.
Pre-Requisites
- Membuat Proyek Android Baru di Android Studio
- Melakukan HTTP GET Request Tanpa Param di Retrofit Android
- Melakukan HTTP GET Request Dengan Query Param di Retrofit Android
Android REST API client menggunakan Retrofit
Pertama-tama, buatlah sebuah proyek Android di Android Studio. Setelah itu, tambahlah dependencies seperti berikut pada build.gradle proyek kalian :
compile 'com.google.code.gson:gson:2.6.2' compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2'
Library converter-gson digunakan untuk mengkonversi JSON menjadi Java object, sedangan GSON sendiri adalah library JSON parser yang dikeluarkan oleh Google.
Jika sudah, kalian bisa mengecek JSON data dari randomuser.me di link ini. Untuk keperluan tutorial ini, kita hanya akan menggunakan data “info” yang ada pada JSON tersebut. Selanjutnya, kalian bisa menggunakan link ini untuk mengkonversi data dari JSON ke POJO (Plain Old Java Object. Caranya, copy-pastekan JSON berikut :
{ "info": { "seed": "d59828ae73afb7e7", "results": 1, "page": 1, "version": "1.0" } }
ke dalam JSON Converter tadi, kemudian pilih Source Style = JSON, dan Annotation Style = GSON, setelah itu klik > Preview. Kalian akan mendapatkan data POJO berupa dua buah Java model (Info & Result) seperti di bawah ini :
Info.java
package id.web.twoh.retrofitsample.model; /** * Created by Hafizh Herdi on 5/1/2016. */ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Info { @SerializedName("seed") @Expose private String seed; @SerializedName("results") @Expose private Integer results; @SerializedName("page") @Expose private Integer page; @SerializedName("version") @Expose private String version; /** * * @return * The seed */ public String getSeed() { return seed; } /** * * @param seed * The seed */ public void setSeed(String seed) { this.seed = seed; } /** * * @return * The results */ public Integer getResults() { return results; } /** * * @param results * The results */ public void setResults(Integer results) { this.results = results; } /** * * @return * The page */ public Integer getPage() { return page; } /** * * @param page * The page */ public void setPage(Integer page) { this.page = page; } /** * * @return * The version */ public String getVersion() { return version; } /** * * @param version * The version */ public void setVersion(String version) { this.version = version; } }
Result.java
package id.web.twoh.retrofitsample.model; /** * Created by Hafizh Herdi on 5/1/2016. */ import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class Result { @SerializedName("info") @Expose private Info info; /** * * @return * The info */ public Info getInfo() { return info; } /** * * @param info * The info */ public void setInfo(Info info) { this.info = info; } }
Code di atas nantinya akan digunakan sebagai Model di aplikasi ini.
Setelah itu kalian perlu mendefinisikan base URL dari web services kalian, dalam kasus ini base URL nya adalah sebagai berikut :
public static final String BASE_API_URL = "https://randomuser.me/";
Kemudian, pada method onCreate() di MainActivity.java kalian bisa melakukan inisialisasi library Retrofit seperti di bawah ini :
private void initializeRetrofit(){ Retrofit retrofit = new Retrofit.Builder() .baseUrl(Const.BASE_API_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); }
Pada code di atas kita menggunakan GsonConverterFactory karena data yang didapat dari web service nya berupa JSON, yang kemudian akan diconvert ke dalam Java Object.
Membuat Interface Retrofit2 API Service
Selanjutnya kita akan membuat sebuah interface API Service, yang nantinya akan memetakan path-path endpoint yang ada di web service. Karena saat ini hanya ada satu endpoint berupa /api, maka kita hanya akan membuat fungsi untuk mengambil data dari endpoint tersebut.
package id.web.twoh.retrofitsample.api; import id.web.twoh.retrofitsample.model.Result; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.http.GET; /** * Created by Hafizh Herdi on 5/15/2016. */ public interface UserAPIService { @GET("api") Call<Result> getResultInfo(); @GET("api") Call<ResponseBody> getResultAsJSON(); }
Anotasi @GET, berarti kita akan melakukan GET Request ke URL tersebut. Ada dua fungsi pada kode di atas jika kalian perhatikan, yaitu fungsi dengan balikan Result (getResultInfo()), dan fungsi kedua dengan balikan ResponseBody (getResultAsJSON()). ResponseBody adalah kelas bawaan dari Retrofit. Fungsi dengan balikan ResponseBody digunakan apabila kalian ingin mendapatkan balikan berupa JSON mentah dari web service. Hal ini berguna apabila kalian belum sempat membuat model/java object untuk JSON kalian.
Sedangkan apabila kalian sudah membuat Java object / model dari JSON yang akan kalian dapat, maka kalian bisa langsung memasukkan model kalian ke dalam Call<T>, seperti contoh di fungsi pertama, getResultInfo().
Oke, Retrofit sudah diinisialisasi, API interface juga sudah dibuat. Langkah selanjutnya adalah kita coba untuk langsung menembak web service menggunakan Retrofit. Pada tutorial ini ada dua cara untuk menembak ke web service.
Mendapatkan balikan berupa Model Java Object dari Retrofit Android
Cara yang pertama adalah apabila kalian ingin mendapatkan hasil berupa Model java object. Cara ini memudahkan sehingga kalian tidak perlu memparsing JSON satu ke satu ke dalam object model kalian. Kita menggunakan fungsi Call.enqueue() supaya penembakan ke network bisa dilakukan secara asynchronous :
UserAPIService apiService = retrofit.create(UserAPIService.class); Call<Result> result = apiService.getResultInfo(); result.enqueue(new Callback<Result>() { @Override public void onResponse(Call<Result> call, Response<Result> response) { try { Toast.makeText(MainActivity.this," response version "+response.body().getInfo().getVersion()+"\n response seed " + response.body().getInfo().getSeed(),Toast.LENGTH_SHORT).show(); System.out.println("response output version " + response.body().getInfo().getVersion()); System.out.println("response output seed " + response.body().getInfo().getSeed()); }catch (Exception e){ e.printStackTrace(); } } @Override public void onFailure(Call<Result> call, Throwable t) { t.printStackTrace(); } });
Mendapatkan balikan berupa Raw JSON data dari Retrofit Android
Sedangkan cara kedua digunakan apabila kalian belum membuat Model java object dari JSON yang ingin kalian parsing. Sehingga dengan cara kedua kalian bisa mendapatkan balikan berupa data JSON mentah yang bisa kalian olah sendiri sesuka hati.
UserAPIService apiService = retrofit.create(UserAPIService.class); Call<ResponseBody> result = apiService.getResultAsJSON(); result.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { try { Toast.makeText(MainActivity.this," response version "+response.body().string(),Toast.LENGTH_SHORT).show(); }catch (Exception e){ e.printStackTrace(); } } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { t.printStackTrace(); } });
Jangan lupa tambahkan permission berikut di Manifest supaya Retrofit bisa terkoneksi ke Internet.
<uses-permission android:name="android.permission.INTERNET" />
That’s all. Sekarang kita compile dan coba jalankan demonya.
Demo
Berikut adalah ketika kita menjalankan fungsi pertama, yang otomatis memparsing data JSON ke dalam Model java object. Value yang muncul di Toast adalah berasal dari getter yang ada pada java model.
Sedangkan apabila kita memilih get as JSON, maka kita akan mendapatkan balikan berupa data JSON mentah yang belum diparsing ke dalam java object. Seperti di bawah ini :
Oke guys, semoga membantu ! Untuk source code lengkapnya bisa kalian lihat langsung di GitHub saya. Jangan lupa follow dan star project nya ya, silahkan berkomentar apabila ada yang kurang dimengerti. 🙂
Untuk next tutorial Retrofit2, kalian bisa belajar mengenai :
- Melakukan HTTP GET Request Tanpa Param di Retrofit Android
- Melakukan HTTP GET Request Dengan Query Param di Retrofit Android
Saya mau tanya mas :
Ada tutorial buat sistem pakar dengan menggunakan android studio mas?
lagi butuh ne buat tugas kuliah,,,
Terima kasih..
Gan mau tanya, kalo untuk handling image itu bagusan mana ya, Retrofit apa volley?
Retrofit + Picasso
nice share kakak..
Error di bagian SimpleXmlConverterFactory, itu ngambil dari mana ya?
Saya sudah tambahkan:
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
tapi yang simplexml masih merah.
Coba baca di tutorial ini https://www.twoh.co/2017/01/22/tutorial-parsing-xml-menggunakan-retrofit2-di-android-studio/
Itu ada yang harus ditambahin di dependency build.gradle nya.
error langsung force close kenapa yaa?
error langsung force close kenapa yaa?