Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Memulai dengan Klien HTTP Retrofit 2

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Ari Ana (you can also view the original English article)

Final product image
What You'll Be Creating

Apa itu Retrofit?

Retrofit adalah klien HTTP type-safe untuk Android dan Java. Retrofit memudahkan untuk terhubung ke layanan web REST dengan menerjemahkan API ke antarmuka Java. Dalam tutorial ini, saya akan menunjukkan kepada Anda cara menggunakan salah satu perpustakaan HTTP paling populer dan sering direkomendasikan yang tersedia untuk Android.

Perpustakaan yang kuat ini memudahkan untuk mengkonsumsi data JSON atau XML yang kemudian diurai menjadi Plain Old Java Objects (POJOs). Semua permintaan GET, POST, PUT, PATCH, dan DELETE dapat dieksekusi.

Seperti kebanyakan perangkat lunak open-source, Retrofit dibangun di atas beberapa perpustakaan dan alat canggih lainnya. Di belakang layar, Retrofit memanfaatkan OkHttp (dari pengembang yang sama) untuk menangani permintaan jaringan. Selain itu, Retrofit tidak memiliki konverter JSON bawaan untuk mengurai dari JSON ke objek Java. Sebaliknya ia mengirimkan dukungan untuk perpustakaan konverter JSON berikut untuk menanganinya:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi
  • Protobuf: com.squareup.retrofit2:converter-protobuf
  • Wire: com.squareup.retrofit2:converter-wire

Dan untuk XML, Retrofit mendukung:

  • Simple Framework: com.squareup.retrofit2:converter-simpleframework

Jadi, Mengapa Menggunakan Retrofit?

Mengembangkan perpustakaan HTTP type-safe Anda sendiri untuk berinteraksi dengan REST API dapat sangat merepotkan: Anda harus menangani banyak fungsi seperti membuat koneksi, menyimpan cache, mencoba kembali permintaan yang gagal, threading, penguraian respons, penanganan kesalahan, dan banyak lagi. Retrofit, di sisi lain, direncanakan dengan sangat baik, didokumentasikan, dan diuji—perpustakaan yang sudah diuji coba yang akan menghemat banyak waktu yang berharga dan sakit kepala.

Dalam tutorial ini, saya akan menjelaskan cara menggunakan Retrofit 2 untuk menangani permintaan jaringan dengan membuat aplikasi sederhana untuk melakukan kueri jawaban terbaru dari API Stack Exchange. Kita akan melakukan permintaan GET dengan menentukan endpoint—/answers, ditambahkan ke URL basis https://api.stackexchange.com/2.2/—lalu mendapatkan hasilnya dan menampilkan dalam view recycler. Saya juga akan menunjukkan kepada Anda bagaimana melakukan ini dengan RxJava untuk pengelolaan aliran data dan status yang mudah.

1. Buatlah Sebuah Proyek Android Studio

Jalankan Android Studio dan buat proyek baru dengan activity kosong yang disebut MainActivity.

Create a new empty activity

2. Mendeklarasikan Dependensi

Setelah membuat proyek baru, deklarasikan dependensi berikut di build.gradle Anda. Dependensi mencakup view recycler, perpustakaan Retrofit, dan juga perpustakaan Gson Google untuk mengonversi JSON menjadi POJO (Plain Old Java Objects) serta integrasi Gson Retrofit.

Jangan lupa untuk menyinkronkan proyek untuk mengunduh perpustakaan ini.

3. Menambahkan Perizinan Internet

Untuk melakukan operasi jaringan, kita perlu menyertakan perizinan INTERNET dalam manifest aplikasi: AndroidManifest.xml.

4. Menghasilkan Model Secara Otomatis

Kita akan membuat model kita secara otomatis dari data respons JSON kita dengan memanfaatkan alat yang sangat berguna: jsonschema2pojo.

Mendapatkan Sampel Data JSON

Salin dan tempel https://api.stackexchange.com/2.2/answers?order=desc&sort=activity&site=stackoverflow di bilah alamat browser Anda (atau Anda bisa menggunakan Postman jika Anda familiar dengan alat tersebut). Kemudian tekan Enter—ini akan mengeksekusi permintaan GET pada endpoint yang diberikan. Apa yang akan Anda lihat sebagai respons adalah array dari objek JSON. Tangkapan layar di bawah ini adalah respons JSON menggunakan Postman.

API response to GET request

Respons API untuk permintaan GETSalin respons JSON ini baik dari browser Anda atau Postman.

Memetakan Data JSON ke Java

Sekarang kunjungi jsonschema2pojo dan tempelkan tanggapan JSON ke dalam kotak masukan.

Pilih source type JSON, annotation style Gson, dan hapus centang Allow additional properties.

jsonschema2pojo interface

Kemudian klik tombol Preview untuk menghasilkan objek Java.

jsonschema2pojo output

Anda mungkin bertanya-tanya apa yang dilakukan oleh anotasi @SerializedName dan @Expose dalam kode yang dihasilkan ini. Jangan khawatir, saya akan menjelaskan semuanya!

Anotasi @SerializedName diperlukan Gson untuk memetakan kunci JSON dengan bidang kita. Sesuai dengan konvensi penamaan camelCase Java untuk properti anggota kelas, tidak disarankan untuk menggunakan garis bawah untuk memisahkan kata-kata dalam sebuah variabel. @SerializedName membantu menerjemahkan di antara keduanya.

Dalam contoh di atas, kita memberi tahu Gson bahwa kunci quota_remaining JSON kita harus dipetakan ke field Java quotaRemaining. Jika kedua nilai ini sama, yaitu jika kunci JSON kita adalah quotaRemaining sama seperti field Java, maka tidak diperlukan anotasi @SerializedName di field karena Gson akan memetakannya secara otomatis.

Anotasi @Expose menunjukkan bahwa anggota ini harus terbuka untuk serialisasi atau deserialization JSON.

Mengimpor Model Data ke Android Studio

Sekarang mari kembali ke Android Studio. Buat sub-paket baru di dalam paket utama dan beri nama data. Di dalam paket data yang baru dibuat, buat paket lain dan beri nama model. Di dalam paket model, buat kelas Java baru dan beri nama Owner. Sekarang salin kelas Owner yang dihasilkan oleh jsonschema2pojo dan tempelkan di dalam kelas Owner yang Anda buat.

Lakukan hal yang sama untuk kelas Item baru, disalin dari jsonschema2pojo.

Akhirnya, buat kelas bernama SOAnswersResponse untuk jawaban StackOverflow yang dikembalikan. Anda akan menemukan kode untuk kelas ini di jsonschema2pojo sebagai Example. Pastikan Anda memperbarui nama kelas ke SOAnswersResponse di mana pun itu terjadi.

5. Membuat Instance Retrofit

Untuk mengeluarkan permintaan jaringan ke REST API dengan Retrofit, kita perlu membuat instance menggunakan kelas Retrofit.Builder dan mengonfigurasinya dengan URL dasar.

Buat paket sub-paket baru di dalam paket data dan beri nama remote. Sekarang di dalam remote, buat kelas Java dan beri nama RetrofitClient. Kelas ini akan membuat singleton dari Retrofit. Retrofit membutuhkan URL dasar untuk membangun instance, sehingga kita akan menyampaikan URL ketika memanggil RetrofitClient.getClient(String baseUrl). URL ini kemudian akan digunakan untuk membangun instance di baris 13. Kita juga menetapkan pengonversi JSON yang kita perlukan (Gson) di baris 14.

6. Membuat Antarmuka API

Di dalam paket remote, buat sebuah antarmuka dan beri nama SOService. Antarmuka ini berisi metode yang akan kita gunakan untuk mengeksekusi permintaan HTTP seperti GET, POST, PUT, PATCH, dan DELETE. Untuk tutorial ini, kita akan menjalankan permintaan GET.

Anotasi @GET secara eksplisit mendefinisikan permintaan GET yang akan dijalankan setelah metode dipanggil. Setiap metode dalam antarmuka ini harus memiliki anotasi HTTP yang menyediakan metode permintaan dan URL relatif. Ada lima anotasi bawaan yang tersedia: @GET, @POST, @PUT, @DELETE, dan @HEAD.

Dalam definisi metode kedua, kita menambahkan parameter kueri agar kita dapat menyaring data dari server. Retrofit memiliki anotasi @Query("key") untuk digunakan sebagai pengganti pengkodean manual di endpoint. Nilai key mewakili nama parameter di URL. Ini akan ditambahkan ke URL oleh Retrofit. Misalnya, jika kita mengirimkan nilai "android" sebagai argumen ke metode getAnswers(String tags), URL lengkapnya adalah:

Parameter metode antarmuka dapat memiliki anotasi berikut:

@Path substitusi variabel untuk endpoint API
@Query menentukan nama kunci kueri dengan nilai parameter beranotasi
@Body payload untuk panggilan POST
@Header menentukan header dengan nilai parameter beranotasi

7. Menciptakan Utilitas API

Sekarang akan membuat kelas utilitas. Kita akan menamakannya ApiUtils. Kelas ini akan memiliki URL dasar sebagai variabel static dan juga menyediakan antarmuka SOService ke aplikasi kita melalui metode static getSOService().

8. Menampilkan ke RecyclerView

Karena hasilnya akan ditampilkan dalam view recycler, kita membutuhkan sebuah adaptor. Potongan kode berikut menunjukkan kelas AnswersAdapter.

9. Melaksanakan Permintaan

Di dalam metode onCreate() dari MainActivity, kita menginisialisasi instance antarmuka SOService (baris 9), view recycler, dan juga adaptor. Akhirnya, kita memanggil metode loadAnswers().

Metode loadAnswers() membuat permintaan jaringan dengan memanggil enqueue(). Ketika respons kembali, Retrofit membantu kita untuk menguraikan respons JSON ke daftar objek Java. (Ini dimungkinkan dengan menggunakan GsonConverter.)

10. Memahami enqueue()

enqueue() secara asinkron mengirim permintaan dan memberi tahu aplikasi Anda dengan callback ketika respons datang kembali. Karena permintaan ini asinkron, Retrofit menanganinya di thread latar sehingga thread UI utama tidak diblokir atau terganggu.

Untuk menggunakan enqueue(), Anda harus menerapkan dua metode callback:

  • onResponse()
  • onFailure()

Hanya satu dari metode ini yang akan dipanggil untuk menanggapi permintaan yang diberikan.

  • onResponse(): dipanggil untuk respons HTTP yang diterima. Metode ini dipanggil untuk respons yang dapat ditangani dengan benar bahkan jika server mengembalikan pesan kesalahan. Jadi, jika Anda mendapatkan kode status 404 atau 500, metode ini masih akan dipanggil. Untuk mendapatkan kode status agar Anda dapat menangani situasi berdasarkan pada mereka, Anda dapat menggunakan metode response.code(). Anda juga dapat menggunakan metode isSuccessful() untuk mencari tahu apakah kode status ada dalam rentang 200-300, yang menunjukkan keberhasilan.
  • onFailure(): dipanggil ketika exception jaringan terjadi berkomunikasi ke server atau ketika exception yang tidak terduga terjadi menangani permintaan atau memproses respons.

Untuk melakukan permintaan sinkron, Anda bisa menggunakan metode execute(). Ketahuilah bahwa metode sinkron pada thread main/UI akan memblokir setiap tindakan pengguna. Jadi, jangan jalankan metode sinkron pada thread main/UI Android! Sebagai gantinya, jalankan pada thread latar belakang.

11. Menguji Aplikasi

Anda sekarang dapat menjalankan aplikasinya.

Sample results from StackOverflow

12. Integrasi RxJava

Jika Anda penggemar RxJava, Anda dapat dengan mudah menerapkan Retrofit dengan RxJava. Di Retrofit 1 itu terintegrasi secara default, tetapi di Retrofit 2 Anda perlu menyertakan beberapa dependensi tambahan. Retrofit dikirim dengan adaptor default untuk menjalankan instance Call. Jadi Anda dapat mengubah mekanisme eksekusi Retrofit untuk memasukkan RxJava dengan menyertakan RxJava CallAdapter.

Langkah 1

Menambahkan dependensi.

Langkah 2

Tambahkan CallAdapter baru RxJavaCallAdapterFactory.create() saat membangun instance Retrofit.

Langkah 3

Ketika membuat permintaan, pelanggan anonim kita menanggapi aliran yang dapat diamati yang memancarkan kejadian, dalam kasus kita SOAnswersResponse. Metode onNext kemudian dipanggil ketika pelanggan kita menerima peristiwa apa pun yang dipancarkan yang kemudian diteruskan ke adaptor kita.

Lihat Memulai dengan ReactiveX di Android oleh Ashraff Hathibelagal untuk mempelajari lebih lanjut tentang RxJava dan RxAndroid.

Kesimpulan

Dalam tutorial ini, Anda belajar tentang Retrofit: mengapa Anda harus menggunakannya dan caranya. Saya juga menjelaskan cara menambahkan integrasi RxJava dengan Retrofit. Dalam posting saya berikutnya, saya akan menunjukkan kepada Anda cara melakukan POST, PUT, dan DELETE, cara mengirim data Form-Urlencoded, dan cara membatalkan permintaan.

Untuk mempelajari lebih lanjut tentang Retrofit, silakan lihat dokumentasi resminya. Dan sementara itu, periksa beberapa kursus dan tutorial kami lainnya tentang pengembangan aplikasi Android.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.