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

Mengirim Data Dengan Client HTTP Retrofit 2 untuk Android

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Muhlis Tirowali (you can also view the original English article)

Final product image
What You'll Be Creating

Apa itu Retrofit?

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

Perpustakaan yang kuat ini mempermudah penggunaan data JSON atau XML, yang kemudian diurai menjadi Plain Old Java Objects (POJOs). Permintaan GETPOSTPUTPATCH, dan DELETE semua bisa dieksekusi.   

Seperti kebanyakan perangkat lunak open-source, Retrofit dibangun di atas beberapa perpustakaan dan alat bantu lainnya. Di balik layar, Retrofit memanfaatkannya OkHttp (dari pengembang yang sama) untuk menangani permintaan jaringan. Selain itu, Retrofit tidak memiliki konverter JSON built-in untuk mengurai dari objek JSON ke Java. Sebagai gantinya, ini mendukung perpustakaan konverter JSON untuk menangani hal itu:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi

Untuk Protocol buffers, Retrofit mendukung:

  • Protobuf: com.squareup.retrofit2:converter-protobuf
  • Wire: com.squareup.retrofit2:converter-wire

dan untuk XML Retrofit, mendukunh:

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

Jadi Mengapa Menggunakan Retrofit?

Mengembangkan perpustakaan HTTP type-safe anda sendiri untuk berinteraksi dengan API REST bisa menjadi kesulitan yang nyata: anda harus menangani banyak aspek, seperti membuat koneksi, caching, mencoba kembali permintaan yang gagal, threading, parsing respons, penanganan kesalahan, dan banyak lagi.  Retrofit, di sisi lain, adalah perpustakaan yang terencana, terdokumentasi dan teruji yang akan menghemat banyak waktu dan tenaga.

Dalam tutorial ini, saya akan menjelaskan cara menggunakan Retrofit 2 untuk menangani permintaan jaringan dengan Retrofit 2 untuk menangani permintaan jaringan dengan membangun aplikasi sederhana yang akan menjalankan permintaan POST,  permintaan PUT (untuk memperbarui entitas), dan permintaan DELETE. Saya juga akan menunjukkan cara mengintegrasikannya dengan RxJava dan cara membatalkan permintaan. Kami akan menggunakan API yang disediakan oleh  JSONPlaceholder - ini adalah API REST online palsu untuk pengujian dan pembuatan prototipe.

Lihat posting saya sebelumnya, Memulai Dengan Client HTTP Retrofit 2, untuk belajar bagaimana caranya  menjalankan permintaan GET dan cara mengintegrasikan Retrofit dengan RxJava.  

1. Buat Proyek Android Studio

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

create a new empty activity

2. Membuat Dependensi (Dependencies)

Setelah membuat proyek baru, nyatakan dependensi berikut di build.gradle anda. Dependensinya meliputi perpustakaan Retrofit dan juga perpustakaan Google Gson untuk mengubah JSON menjadi POJO (Plain Old Java Objects) serta integrasi Gson Retrofit.

Pastikan Anda menyelaraskan proyek Anda setelah menambahkan dependensi.  

3. Menambahkan Izin Internet

Untuk melakukan operasi jaringan, kita perlu memasukkan izin INTERNET dalam manifest aplikasi: AndroidManifest.xml.

4. Menjalankan Model Secara Otomatis

Kita akan membuat model secara otomatis dari data respon JSON dengan memanfaatkan: jsonschema2pojo. Kita ingin membuat sebuah permintaan POST (membuat sumber baru) pada API. Tapi sebelum kita menjalankan permintaan ini, kita perlu mengetahui respon JSON yang kita harapkan saat dijalankan dengan sukses sehingga Retrofit dapat mengurai respons JSON dan mendesainnya ke objek Java. Menurut API, jika kita mengirim data berikut dalam sebuah permintaan POST:

Kita harus mendapatkan respon berikut:

Peta Data JSON ke Java

Salin data respom sampel dari bagian sebelumnya. Sekarang kunjungi jsonschema2pojo dan paste respon JSON ke dalam kotak input. Pilih jenis sumber JSON, gaya anotasi Gson, hapus centang  Allow additional properties, dan ganti nama kelasnya Example menjadi Post.  

jsonschema2pojo input

Kemudian klik tombol Preview untuk menjalankan obyek Java.

jsonschema2pojo output

Anda mungkin bertanya-tanya apa itu @SerializedName dan @Expose penjelasan dalam kode yang dihasilkan ini! Jangan khawatir, saya akan jelaskan semuanya!

Anotasi @SerializedName dibutuhkan untuk Gson memetakan tombol JSON ke objek Java.

Dalam kasus ini, identitas pengguna tombol JSON dipetakan ke bidang kelas userID. Tapi perhatikan bahwa karena mereka sama, tidak perlu menyertakan anotasi @SerializedName di bidang karena Gson akan memetakannya secara otomatis untuk kita.

Anotasi @Expose menunjukkan bahwa anggota kelas harus terbuka untuk serialisasi atau deserialisasi JSON.  

Impor Model Data ke Android Studio

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

Selain getter dan setter, saya juga menambahkan metode  toString(). (Di Intellij, anda bisa menggunakan perintah Generate untuk mempermudah ini: Alt-Insert pada Windows, atau Command-N di macOS).

5.   Membuat Instansi Retrofit

Untuk mengeluarkan permintaan jaringan ke API dengan Retrofit, kita perlu membuat contoh menggunakan kelas Builder Retrofit dan mengkonfigurasinya dengan URL dasar.  

Buat sub-paket baru di dalam data paket dan nama itu  remote. Nah, di dalam paket ini, buat kelas Java dan beri nama RetrofitClient. Kelas ini akan menciptakan satu kesatuan Retrofit dalam metode getClient (String baseUrl) dan mengembalikannya ke pemanggil.  

Seperti yang saya sebutkan sebelumnya, Retrofit membutuhkan URL dasar untuk membangun instancenya, jadi kami akan menyebarkannya sebuah URL saat memanggil RetrofitClient.getClient (String baseUrl). URL ini kemudian akan digunakan untuk membangun instance di baris 13. Kita juga menentukan konverter JSON yang kita butuhkan (Gson) di baris 14.

6.   Membuat Antarmuka API

Di dalam paket remote, buatlah sebuah antarmuka dan sebut saja APIService. Antarmuka ini berisi metode yang akan kita gunakan untuk menjalankan permintaan HTTP seperti POSTPUT, dan DELETE. Mari kita mulai dengan POST request.

Melihat ke kelas APIService, kita punya metode yang disebut  savePost(). Di atas metode tersebut adalah @POST annotation, yang menunjukkan bahwa kita ingin menjalankan permintaan POST saat metode ini dipanggil. Nilai argumen untuk anotasi @POST adalah titik akhir-yaitu /posts. Jadi URL lengkapnya adalah  http://jsonplaceholder.typicode.com/posts.

Oke, jadi bagaimana dengan @FormUrlEncoded? Ini akan menunjukkan bahwa permintaan tersebut akan memiliki tipe MIME-nya (bidang header yang mengidentifikasi format badan permintaan atau tanggapan HTTP) yang ditetapkan ke   aplikasi / x-www-form-urlencoded dan juga bahwa nama bidang dan nilainya akan dikodekan UTF-8 sebelum dikodekan URI. Anotasi @Field("key") dengan parameter nama harus sesuai dengan nama yang diharapkan API. Retrofit secara implisit mengubah nilai ke string menggunakan String.valueOf (Object), dan stringnya kemudian membentuk URL yang dikodekan. nilai null diabaikan.

Misalnya, memanggil APIService.savePost (“My Visit To Lagos", "I visited ...", 2) menghasilkan permintaan dari title = My + Visit + To + Lagos & body = I + visited ... & userId = 2.

Menggunakan Anotasi @Body

Kita juga bisa menggunakan anotasi @Body pada parameter metode layanan, alih-alih menentukan bentuk permintaan gaya form dengan sejumlah bidang individual. Objek akan membuat serial menggunakan Retrofit contoh Konverter sepesifik selama pembuatan. Ini hanya digunakan saat melakukan operasi POST atau PUT.

7.   Membuat Utilitas API

Kita akan membuat kelas utilitas. Jadi buatlah kelas dalam data.remote dan beri nama ApiUtils. Kelas ini akan memiliki basis URL sebagai variabel statis dan juga akan menyediakan APIService antarmuka dengan metode statis getAPIService() ke bagian aplikasi lainnya.

Pastikan Anda mengakhiri URL dasar dengan /.

8.   Membuat Layout

Berkas activity_main.xml adalah tata letak untuk MainActivity kita. Tata letak ini akan memiliki satu bidang edit teks untuk judul post dan satu lagi untuk body post. Ini juga mencakup tombol untuk mengirimkan post ke API.

9.   Melaksanakan permintaan POST

Dalam metode onCreate() di MainActivity, kita menginisialisasi sebuah instance dari antarmuka APIService (baris 14). Kami juga menginisialisasi bidang EditText dan tombol kirim yang akan memanggil metode sendPost() saat diklik (baris 22).

Dalam metode sendPost(String, String) di kelas MainActivity, kita melewati judul dan body post ke metode ini. Hal yang  akan lakukan oleh metode ini adalah memanggil metode antarmuka layanan API kita savePost(String, String) yang tugasnya adalah melaksanakan permintaan POST mengirim judul dan badan (body) ke API. ShowResponse(respon String) akan menampilkan respon di layar.

Instance APIService kita metode mAPIService savePost (String, String) akan kembali melakukan instance Panggilan yang memiliki metode yang disebut enqueue (callback callback).

Pengertian enqueue()

enqueue() secara asinkron mengirimkan permintaan dan memberi tahu aplikasi anda dengan panggilan balik saat ada tanggapan kembali. Karena permintaan ini bersifat asinkron, Retrofit menangani eksekusi di thread latar belakang sehingga untaian UI utama tidak diblokir atau terganggu.

Untuk menggunakan enqueue(), anda harus menerapkan dua metode panggilan balik: onResponse() dan onFailure(). Hanya satu dari metode ini yang akan dipanggil untuk menanggapi permintaan yang diberikan.

  • onResponse(): dipanggil untuk menerima respons HTTP. Metode ini disebut untuk respon yang dapat ditangani dengan benar bahkan jika server mengembalikan pesan kesalahan. Jadi jika mendapat kode status 404 atau 500, metode ini tetap akan dipanggil. Untuk mendapatkan kode status agar anda dapat menangani situasi berdasarkan hal itu, anda dapat menggunakan metode respon.code(). Anda juga bisa menggunakan isSuccessful() untuk mengetahui apakah kode status berada di kisaran 200-300, yang menunjukkan keberhasilan.
  • onFailure(): dipanggil saat pengecualian jaringan terjadi saat berkomunikasi ke server atau saat terjadi pengecualian yang tidak terduga saat menangani permintaan atau memproses respons.

Permintaan Sinkron

Melakukan permintaan sinkron, anda bisa menggunakan  execute() dalam sebuah Call instance. Namun perlu disadari bahwa metode sinkron pada thread main/UI akan memblokir tindakan pengguna. Jadi jangan melakukan metode sinkron pada thread main/UI Android! Alih-alih menjalankannya di thread latar belakang.

Menggunakan RxJava  

RxJava diintegrasikan ke dalam Retrofit 1 secara default, namun di Retrofit 2 anda perlu memasukkan beberapa tambahan dependencies. Retrofit dilengkapi dengan adaptor default  yang mengeksekusi Call instance. Jadi Anda bisa mengubah mekanisme eksekusi Retrofit untuk memasukkan RxJava dengan menyertakan RxJava CallAdapter. Inilah langkah-langkahnya:

Langkah 1

Tambahkan dependensinya.

Langkah 2

Tambahkan CallAdapter RxJavaCallAdapterFactory.create() ketika  membangun instance Retrofit (baris 5).  

Langkah 3  

Memperbarui ApiService savePost(String title, String body, String UserId) untuk menjadi mudah diamati.

Langkah 4

Saat melakukan permintaan, pelanggan anonim kami merespon arus yang dapat diamati yang menyiarkan kejadian (event), di kasus Post kita. Metode onNext kemudian dipanggil saat pelanggan kami menerima event apapun, yang kemudian diteruskan ke showResponse(String response).

Cek Memulai ReactiveX dalam Android oleh Ashraff Hathibelagal untuk mempelajari lebih lanjut tentang RxJava dan RxAndroid.

10. Menguji App

Pada titik ini, anda dapat menjalankan aplikasi dan klik tombol kirim saat anda memasukkan judul dan isi. Tanggapan dari API akan ditampilkan di bawah tombol kirim.

final app screenshot

11. Melaksanakan permintaan PUT

Sekarang kita tahu bagaimana cara menjalankan permintaan POST, mari kita lihat bagaimana kita bisa menjalankan PUT yang meminta entitas pembaruan. Tambahkan metode baru berikut ke kelas APIService.

Untuk memperbarui post dari API, kita memiliki endpoint /post/{id} dengan {id} menjadi placeholder untuk id dari postingan yang ingin kita update. Anotasi @Path adalah penggantian nama di segmen jalur URL {id}. Sadarilah jika nilai dikonversi menjadi string dengan menggunakan String.valueOf(Obyek) dan URL dikodekan. Jika nilainya sudah dikodekan, anda dapat menonaktifkan pengkodean URL seperti ini: @Path(value="name",encoded=true)

12.   Melaksanakan Permintaan DELETE

Mari kita lihat bagaimana cara menjalankan permintaan DELETE. Menggunakan JSONPlaceholder API, untuk menghapus sumber posting, endpoint is /posts/{id} dengan metode HTTP DELETE. Kembali ke APIService antarmuka kita, kita hanya perlu memasukkan metode deletePost() yang akan melaksanakannya. Kita melewatkan  id dari post ke metode ini, kemudian diganti di segmen jalur URL {id}.

13.   Membatalkan Permintaan

Misalnya Anda ingin memberi pengguna kemampuan untuk membatalkan permintaan. Hal ini sangat mudah dilakukan di Retrofit. Kelas Panggilan Retrofit memiliki metode yang disebut cancel() yang akan melakukan hal itu (baris 32 di bawah). Metode ini akan memicu metode onFailure() dalam callback  

Cara ini bisa dipanggil, misalnya jika tidak ada koneksi internet atau saat terjadi pengecualian yang tidak terduga membuat respom permintaan atau penanganan. Jadi untuk mengetahui apakah permintaan tersebut dibatalkan, gunakan metode isCancel() dalam kelas panggilan (Call) (baris 20).  

Kesimpulan

Dalam tutorial ini, anda belajar tentang Retrofit: mengapa anda harus menggunakannya dan bagaimana mengintegrasikannya ke dalam proyek unutk menampilkan POST, PUTDELETE dan batalkan permintaan. Anda juga belajar bagaimana mengintegrasikan RxJava dengannya. Di posting berikutnya menggunakan Retrofit, saya akan menunjukkan cara mengunggah file.

Untuk mempelajari lebih lanjut tentang Retrofit, lihat bagian dokumentasi resmi. Dan lihat beberapa tutorial dan kursus kami yang lain tentang pengembangan Android di sini, di Envato Tuts+!

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.