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

Connect ke API Dengan Retrofit, RxJava 2, dan Kotlin

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Jean Perez (you can also view the original English article)

Hari ini, sangat umum bagi aplikasi seluler untuk bertukar data dengan server jarak jauh, menggunakan Antarmuka Pemrograman Aplikasi web (API).

Baik itu memeriksa email baru menggunakan API Gmail, mencari acara di area lokal dengan API Ticketmaster, atau memanfaatkan riwayat Spotify pengguna untuk merekomendasikan musik baru, API (biasanya API REST) ​​menyediakan akses ke banyak informasi yang Anda dapat gunakan di aplikasi Anda.

Berkomunikasi dengan server jarak jauh telah menjadi bagian penting dari perkembangan ponsel modern yang ada libraries yang tak terhitung jumlahnya didedikasikan untuk membantu Anda membuat panggilan jaringan, tetapi Retrofit adalah salah satu libraries jaringan yang paling banyak digunakan untuk Android.

Dalam artikel ini, saya akan menunjukkan kepada Anda cara mengambil data dari API jarak jauh, menggunakan Retrofit, dan Nomics Cryptocurrency & Bitcoin API gratis.

Setelah Anda mengambil beberapa data, Anda ingin menggunakannya dengan baik! Di Android, ini sering melibatkan meneruskan data ke UI utama Android yang penting, siap untuk ditampilkan di UI aplikasi Anda, atau mengubah data dengan cara tertentu, seperti memfilter atau menggabungkannya. Mudah, Anda dapat melakukan semua hal ini dengan pustaka RxJava, jadi kami akan menggunakan Retrofit dan RxJava berdampingan dalam proyek kami.

Pada bagian akhir artikel ini, Anda akan membuat aplikasi yang mengambil data dari API jarak jauh menggunakan Retrofit, mengonversi data tersebut menjadi format Observasi RxJava, lalu memanipulasi data tersebut menggunakan pemilihan operator dan penjadwal RxJava dan RxAndroid.

Apa yang Akan Kita Buat

Tidak ada kekurangan API di luar sana, tetapi untuk membantu menjaga hal-hal terus terang, kami akan menggunakan Nomics Cryptocurrency & Bitcoin API gratis untuk mengambil daftar cryptocurrency dan harga pasarnya untuk perdagangan yang tercatat terakhir. Saya kemudian akan menggunakan RecyclerView untuk menampilkan informasi ini di aplikasi kami.

The finished app will display data retrieved from the Nomics Cryptocurrency Bitcoin API

Untuk menerbitkan request Retrofit, kita perlu membuat hal berikut:

  • Sebuah class Retrofit. Ini adalah tempat Anda akan membuat instance Retrofit, menambahkan konverter (kami akan menggunakan Gson), dan kemudian menentukan URL dasar yang harus digunakan aplikasi Anda untuk semua permintaan HTTP-nya.
  • Sebuah class data. Kelas ini mewakili respon untuk setiap panggilan API aplikasi Anda.
  • Sebuah interface API. Di sinilah Anda mendeskripsikan setiap permintaan Retrofit yang ingin Anda buat.

Pada akhir tutorial ini, Anda akan memiliki proyek yang terlihat seperti ini:

The finished project structure will consist of a Retrofit class data class API interface and an adapter to display the UI

Mengapa Saya Harus Menggunakan RxJava untuk Panggilan API Saya?

RxJava adalah implementasi open-source, JVM-kompatibel dari perpustakaan ReactiveX yang dirancang untuk membantu Anda bekerja dengan aliran data asynchronous dalam gaya pemrograman reaktif, dan tanpa harus menulis satu ton callback.

Ada banyak manfaat menggunakan RxJava dalam proyek Android Anda, tetapi beberapa yang paling penting diantaranya:

  • Kode yang disederhanakan. RxJava memungkinkan Anda mendeskripsikan apa yang ingin Anda capai, daripada menulis daftar instruksi untuk aplikasi Anda untuk diselesaikan. Pendekatan ini biasanya menghasilkan kode yang lebih ringkas dan mudah dibaca manusia yang lebih mudah dikelola dan tidak rentan terhadap kesalahan.
  • Konsistensi. RxJava mungkin adalah pustaka yang berfokus pada data, tetapi definisi "data" cukup luas dan mencakup hal-hal seperti variabel, cache, properti, dan bahkan kejadian input pengguna seperti klik dan gesekan. Karena RxJava memperlakukan hampir semuanya sebagai data, ia menyediakan alur kerja konsisten yang dapat Anda gunakan di seluruh aplikasi Anda, dalam banyak skenario yang berbeda.
  • Multithreading menjadi mudah. Aplikasi seluler modern harus dapat multitask, tetapi sebagai lingkungan single-threaded, Android bukanlah multitasker yang lahir alami! Android menyediakan beberapa alat bawaan untuk membuat untaian tambahan, tetapi tidak satu pun dari solusi ini sangat mudah digunakan, dan mereka dapat dengan cepat menghasilkan kode kompleks yang rentan terhadap masalah kinerja seperti kebocoran memori. Dengan menambahkan RxJava ke proyek Anda, Anda mendapatkan akses ke subscribeOn dan observeOn operator, yang membuatnya lebih mudah untuk membuat dan mengelola untaian tambahan.
  • Transformasi data yang rumit. RxJava memiliki banyak sekali operator yang dapat Anda gunakan untuk memodifikasi, memfilter, menggabungkan, dan mentransformasi data yang dipancarkan oleh RxJava Observables Anda. Menerapkan operator ke Observable biasanya mengembalikan Observable lain, jadi jika Anda tidak dapat menemukan operator yang sempurna untuk proyek Anda, maka Anda dapat terus menerapkan operator ke Observable hingga Anda mendapatkan hasil yang persis sama seperti yang Anda inginkan.

Untuk informasi lebih lanjut tentang manfaat menggunakan RxJava dalam proyek Android Anda, lihat artikel Memulai Dengan RxJava 2 kami.

Otentikasi Dengan API Key

Banyak API mengharuskan Anda memasukkan kunci API unik dalam permintaan HTTP Anda. Kunci ini memungkinkan perusahaan atau individu di belakang API untuk melacak permintaan yang terkait dengan proyek Anda, yang berguna untuk menegakkan pembatasan penggunaan atau jika pembuat API hanya ingin beberapa wawasan tentang bagaimana API mereka digunakan.

Saat mempertanyakan API Cryptocurrency & Bitcoin Nominasi, Anda harus memasukkan kunci API unik ke dalam permintaan Anda, jadi mari hasilkan kunci ini sekarang:

  • Di browser web Anda, kunjungi situs web Nomics.
  • Temukan tombol Get Free API Key, lalu klik.
  • Periksa Persyaratan dan Ketentuan, dan jika Anda senang untuk melanjutkan, maka lengkapi formulir.
  • Pilih Urutan Lengkap. Setelah beberapa saat, Anda akan menerima email yang berisi API Key unik Anda.

Buat Aplikasi Anda: Menambahkan Dependencies

Buat aplikasi Android baru dengan pengaturan pilihan Anda, tetapi ketika diminta, pilih untuk Menyertakan dukungan Kotlin.

Selanjutnya, buka file build.gradle Anda dan tambahkan semua pustaka yang akan kita gunakan di seluruh proyek ini. Selain Retrofit dan RxJava 2.0, kita memerlukan hal-hal berikut:

1. RecyclerView

Setelah mengambil data kita, kita akan menampilkannya dalam daftar, menggunakan RecyclerView.

2. Gson Converter

Seringkali, respons server akan dipetakan ke format bahasa-netral, seperti JSON, sehingga aplikasi Anda perlu membuat serial dan deserialize data JSON. Di luar kotak, Retrofit hanya dapat mendesentralisasi body HTTP ke dalam jenis ResponsBody OkHttp, tetapi Anda dapat mendukung jenis lain dengan mengalihkan konversi ke konverter independen.

Ada berbagai macam konverter yang tersedia, tetapi dalam tutorial ini saya akan menggunakan Gson, yang mengubah JSON menjadi objek Java yang setara.

3. The RxJava Adapter

Untuk membuat method interface yang mampu mengembalikan jenis RxJava, kita perlu menggunakan adaptor Retrofit untuk RxJava.

4. The RxAndroid Library

Library RxAndroid menyediakan beberapa binding spesifik Android untuk RxJava, terutama AndroidSchedulers.mainThread.

Di Android, Anda hanya dapat memperbarui UI aplikasi Anda dari UI utama. Jika pengguna Anda akan melihat data cryptocurrency apa pun, Anda harus beralih ke UI utama di beberapa titik.

Anda dapat dengan cepat dan mudah menjadwalkan kode untuk berjalan di UI utama Android dengan menggunakan operator observasiOn RxJava dalam kombinasi dengan penjadwal AndroidSchedulers.mainThread RxAndroid:

Untuk menggunakan RxAndroid dalam proyek Anda, Anda harus mengikuti proyek dependency:

... Tetapi Bukan RxKotlin

Pada titik ini, Anda mungkin bertanya-tanya mengapa kami mengkodekan di Kotlin tetapi menggunakan RxJava, ketika ada library RxKotlin khusus yang tersedia.

Sejak Kotlin diperkenalkan 100% dengan Java, mayoritas pustaka Java kompatibel dengan Kotlin, dan RxJava tidak terkecuali! Anda dapat menggunakan RxJava dan RxKotlin dalam proyek Anda, tetapi untuk membantu menjaga semuanya tetap sederhana, saya akan tetap menggunakan RxJava di seluruh tutorial ini. Jika Anda tertarik untuk mempelajari lebih lanjut tentang RxKotlin, maka Anda akan menemukan banyak informasi di artikel saya tentang Kotlin Reactive Programming With RxJava and RxKotlin.

Tambahkan Dependensi Proyek

Setelah menambahkan semua dependensi proyek ini, file build.gradle Anda akan terlihat seperti ini:

Minta Akses ke Internet

Karena aplikasi kita akan berkomunikasi dengan server jarak jauh, perlu izin untuk mengakses Internet. Buka Manifest proyek Anda dan tambahkan yang berikut:

Perhatikan bahwa karena android.permission.INTERNET dikategorikan sebagai izin aman, kita tidak perlu memintanya saat runtime.

Tentukan HTTP Endpoints Anda

Selanjutnya, kita perlu membuat interface tempat kita mendeskripsikan permintaan HTTP kita:

  • Pilih File> New> Kotlin File / Class dari toolbar Android Studio.
  • Namai file ini GetData.
  • Buka menu dropdown, dan pilih Interface.
Create a new interface by selecting File New Kotlin FileClass from Android Studios toolbar
  • Klik OK.

Setiap permintaan harus menyertakan setidaknya satu anotasi HTTP, yang menunjukkan bagaimana permintaan ini harus ditangani. Retrofit mendukung anotasi untuk semua jenis permintaan standar, tetapi kami hanya akan menggunakan penjelasan @GET, karena kami mengambil data dari server.

Kami juga perlu menjelaskan titik akhir, yang merupakan URL tempat kita mengambil data. Di aplikasi kita, ini adalah https://api.nomics.com/v1/markets/prices, yang terdiri dari URL dasar (https://api.nomics.com/v1/) dan URL relatif (prices). Kita akan menentukan URL dasar di tempat lain dalam proyek kita, jadi untuk saat ini kita hanya perlu mengkhawatirkan tentang URL relatif.

Jika API yang dimaksud tidak memerlukan API Key, maka menyatakan basis dan URL relatif harus cukup, tetapi karena API Nomics memang memerlukan kunci, kita perlu memasukkan informasi ini ke dalam permintaan kita.

Proses ini dapat bervariasi di antara API, jadi Anda harus selalu merujuk ke dokumentasi API Anda untuk informasi lebih lanjut. Secara khusus, perhatikan setiap bagian yang ditandai Autentikasi, karena ini sering kali tempat Anda akan menemukan petunjuk yang berkaitan dengan API Key. Dokumentasi API Nomics adalah contoh sempurna dari ini, karena ia memiliki bagian Autentikasi khusus yang menjelaskan bagaimana Anda harus memasukkan kunci Anda dalam format berikut:

https://api.nomics.com/v1/prices?key=your-api-key-goes-here

Menggabungkan anotasi @GET, URL relatif, dan API  Key Anda memberi kita hal-hal berikut:

Saya akan mengambil data API menggunakan fungsi getData () Kotlin. Karena kita ingin fungsi ini memancarkan RxJava Observables, kita perlu mendefinisikan titik akhir kita sebagai tipe RxJava yang valid:

Berikut Interface yang selesai:

Pastikan Anda mengganti YOUR-API-KEY-HERE dengan Key Anda sendiri!

Membuat Model Dengan Class Data Kotlin

Selanjutnya, kita perlu membuat Class data yang mewakili respons untuk masing-masing panggilan API kita:

  • Pilih File> New> Kotlin File / Class dari toolbar Android Studio.
  • Nama kelas ini RetroCrypto, dan kemudian klik OK.
  • Open your new RetroCrypto class.

Jika sebelumnya Anda melakukan panggilan Retrofit menggunakan Java, maka ini adalah satu area di mana Kotlin jauh lebih ringkas daripada Java yang setara, berkat classes data.

Di Kotlin, class data adalah kelas yang dirancang semata-mata untuk menampung beberapa data. Compiler Kotlin mengimplementasikan metode hashCode (), equals () dan toString () yang diperlukan secara otomatis, sehingga Anda dapat membuat kelas model data dalam satu baris kode.

Buka file RetroCrypto Anda dan tambahkan berikut:

Membuat Instance Retrofit

Untuk mengirim permintaan jaringan, kita perlu menggunakan kelas Retrofit.Builder untuk membuat instance Retrofit, di mana kita akan memanggil titik akhir kami dan mengambil informasi cryptocurrency.

Setelah kita membuat objek Retrofit kita, kita perlu:

  • Atur Base URL. Sebelum Anda dapat memanggil metode build () di Retrofit.Builder, Anda harus setidaknya mendefinisikan URL dasar.
  • Atur konverter default, menggunakan metode addConverterFactory (). Setelah Anda menyiapkan konverter Gson, itu akan menerjemahkan respons JSON untuk Anda secara otomatis.
  • Terapkan adaptor. Retrofit mengirim dengan adaptor default untuk menjalankan instance Call, tetapi Anda dapat menerapkan satu atau beberapa adapter tambahan dengan menyediakan instance adaptor tersebut saat Anda membangun instance Retrofit. Untuk menggunakan RxJava bersama Retrofit, kita perlu menambahkan RxJava2CallAdapterFactory sebagai adaptor panggilan, menggunakan .addCallAdapterFactory.

Dan akan Menjadi seperti ini:

Secara default, sebuah Observable memancarkan datanya di thread tempat langganan dideklarasikan, yang di Android biasanya merupakan utama UI. Namun, untuk hasil terbaik, aplikasi Anda hanya boleh melakukan pekerjaan terkait UI di  UI, jadi kami akan menggunakan langganan RxJavaOn dan subscribeOn yang menyertainya Scheduler untuk membuat untaian alternatif tempat yang dapat dieksekusi oleh Observable:

Selanjutnya, kami akan menggunakan operator observeOn, plus AndroidSchedulers.mainThread Scheduler RxAndroid untuk mengirim pemberitahuan Observable ke UI utama Android, siap untuk menampilkan data yang diambil di UI aplikasi kita.

Untuk melihat lebih rinci untuk berlangganan Observables di Kotlin, periksa posting saya di Kotlin Reactive Programming With RxJava and RxKotlin.

Dalam cuplikan berikut, saya juga menggunakan metode handleResponse () untuk menangani data yang akan kita terima, setelah operasi jaringan yang sukses:

Kode di atas mengembalikan Disposable — jika Anda memiliki pengalaman sebelumnya dari RxJava 1.0, maka sekali pakai pada dasarnya adalah versi langganan RxJava 2.0.

Setelah selesai menggunakan / berlangganan, Anda harus mengatur untuk menghindari kebocoran memori. kita dapat mempermudah proses pembersihan ini dengan menambahkan semua produk sekali pakai kita ke CompositeDisposable, yang merupakan wadah yang dapat menampung banyak sekali pakai. Pada kode di atas, kami melakukan inisialisasi RxJava CompositeDisposable, lalu menambahkan setiap disposable ke CompositeDisposable, menggunakan metode add ().

Kemudian, kita hanya perlu menghapus CompositeDisposable selama metode onDestroy () proyek kami:

Berikut kelas yang sudah selesai:

Menampilkan Data API Cryptocurrency

Pada titik ini, aplikasi kita dapat berhasil mengambil data dari API Nomics, sehingga tugas terakhir kita adalah menampilkan data ini kepada pengguna, melalui RecyclerView.

Untuk menerapkan RecyclerView, kita memerlukan yang berikut:

  • Sebuah Widget RecyclerView.
  • Tata letak XML kustom yang dapat digunakan RecyclerView untuk menampilkan masing-masing item.
  • Adaptor, yang mengikat data ke RecyclerView Anda.

Membuat List yang Dapat Di scroll

Let’s start by adding a RecyclerView widget to our activity_main.xml file:

Sekarang kita memiliki widget RecyclerView, kita perlu mendefinisikan tata letak untuk setiap baris dalam RecyclerView itu. Saya akan membuat tata letak sederhana yang terdiri dari dua TextViews, tempat saya akan menampilkan nama dan harga untuk setiap cryptocurrency yang diambil dari API Nomics:

  • Control-klik folder res / layout proyek Anda.
  • Pilih New > Layout resource file.
  • Beri nama file ini row_layout, lalu klik OK.
Create a row_layoutxml file where well define the layout of each item in our RecylerView

Buka file row_layout.xml, dan tambahkan yang berikut:

RecyclerView kita sekarang akan menggunakan tata letak ini untuk setiap item dalam daftar kita.

Binding Data Dengan Adaptor Android

Adaptor adalah komponen yang bertanggung jawab untuk mengikat setiap item ke View dengan RecyclerView.

Untuk menghubungkan model data yang mendasarinya ke UI aplikasi Anda, Anda perlu meng-extend RecyclerView.Adapter, lalu terapkan yang berikut:

  • onCreateViewHolder (). Di sinilah kita menentukan tata letak (R.layout.row_layout) yang setiap item dalam RecyclerView harus menggunakan, dan mengembang tata letak itu menggunakan LayoutInflater.
  • onBindViewHolder (). Dipanggil oleh RecyclerView untuk menampilkan data pada posisi yang ditentukan
  • getItemCount (). Mengembalikan jumlah item yang ada dalam kumpulan data.

Ketika Anda bekerja dengan Views, Anda sering dapat menyederhanakan kode Anda dengan menggunakan ekstensi Kotlin Android. Ekstensi ini memungkinkan Anda untuk mengakses Views layout secara langsung, dengan mengimpornya ke kelas Anda sebagai properti "sintetis". Misalnya, Anda dapat mengimpor referensi ke semua Views dengan file row_layout Anda, menggunakan hal berikut:

Pada titik ini, Anda dapat mengakses semua Views row_layout, hanya menggunakan ID mereka — dan tanpa findViewById () yang terlihat! Misalnya, Anda dapat memperbarui widget text_name, menggunakan hal berikut:

Di kelas ini, saya juga akan meneruskan data sebagai ArrayList, bersama dengan Listener yang akan saya gunakan untuk menangani event input user. Akhirnya, untuk membuat aplikasi kita terlihat sedikit lebih menarik, saya akan mendefinisikan Array warna dan kemudian menggunakannya sebagai latar belakang untuk item RecyclerView saya.

Buat class Kotlin baru bernama MyAdapter lalu tambahkan hal berikut:

Testing Aplikasi Retrofit dan RxJava 2.0 mu.

Sekarang saatnya untuk menguji aplikasi Anda! Pastikan Anda memiliki koneksi internet aktif, lalu instal aplikasi Anda pada smartphone atau tablet Android atau AVD (Android Virtual Device). Segera setelah aplikasi Anda diluncurkan, Retrofit akan mengambil semua data yang tersedia dari API Nomics, dan kemudian menampilkannya sebagai bagian dari RecyclerView Anda.

The finished user interface complete with data retrieved from a remote API

Anda juga dapat mengunduh proyek yang sudah selesai dari repo GitHub kami.

Kesimpulan

Dalam artikel ini, saya menunjukkan kepada Anda cara mengambil data dari API menggunakan Retrofit, mengonversi data itu ke dalam RxJava 2.0, lalu menampilkannya dalam RecyclerView.

Jika Anda ingin menjelajahi lebih banyak API, maka Anda akan menemukan daftar API gratis, publik APIs lebih di GitHub, atau Anda dapat mempelajari lebih lanjut tentang RxJava dengan melihat seri kami di Memulai Dengan RxJava 2 untuk Android, atau dengan melihat di seri Kotlin Reactive Programming kami.

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.