Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Android SDK
Code

Pemrograman Reaktif Kotlin Dengan RxJava dan RxKotlin

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Rana Salsabiela (you can also view the original English article)

Sejak bahasa yang disokong secara rasmi untuk pembangunan Android, Kotlin telah berkembang popular di kalangan pemaju Android, dengan laporan Google meningkatkan aplikasi yang dibuat menggunakan Kotlin.

Sekiranya anda telah menggunakan RxJava atau RxAndroid sebelum ini dan ingin membuat suis ke Kotlin, atau mahu memulakan pengaturcaraan semula dengan Kotlin, tutorial ini adalah untuk anda. Kami akan membincangkan keperluan untuk mewujudkan RxJava 2.0 Observers, Observables dan aliran data di Kotlin, sebelum melihat bagaimana anda boleh mengurangkan kod dandang dari projek anda, dengan menggabungkan RxJava dengan fungsi sambungan Kotlin.

Menggunakan RxJava dengan Kotlin boleh membantu anda membuat aplikasi yang sangat aktif dalam kod kurang, tetapi tidak lagi berkongsi masalah untuk masalah penukaran SAM yang banyak pembangun menghadapi ketika mereka mula menggunakan RxJava 2.0 dengan Kotlin.

Untuk membungkus perkara, kami akan membuat aplikasi yang menunjukkan bagaimana anda boleh menggunakan Rx untuk menyelesaikan beberapa isu yang anda hadapi dalam projek-projek Android seumur hidup.

Jika ini adalah rasa pertama anda RxJava, maka di sepanjang jalan anda juga akan menyediakan semua maklumat latar belakang yang anda perlukan untuk memahami konsep inti Rx Java. Walaupun anda tidak pernah bereksperimen dengan RxJava sebelum ini, anda akan mempunyai beberapa aplikasi yang berfungsi, menggunakan RxJava, RxKotlin, RxAndroid , dan RxBinding.

Apa itu RxJava, anyway?

RxJava adalah pelaksanaan sumber terbuka perpustakaan ReactiveX yang membantu anda membuat aplikasi dalam gaya pengaturcaraan semula. Walaupun Rx direka untuk memproses aliran data segerak dan tidak segerak, ia tidak terhad kepada jenis data "tradisional". Takrif RxJava tentang "data" cukup luas dan termasuk perkara seperti cache, pembolehubah, sifat, dan juga peristiwa input pengguna seperti klik dan swipes. Hanya kerana aplikasi anda tidak berurusan dengan nombor yang besar atau melakukan transformasi data yang rumit, itu tidak bermakna ia tidak akan mendapat manfaat daripada RxJava!

Untuk latar belakang yang sedikit di Rx Java untuk apl Android, anda boleh menyemak beberapa jawatan saya yang lain di sini di Envato Tuts +.

Jadi bagaimana kerja RxJava?

Rx Java memanjangkan corak rekabentuk perisian Observer, yang berdasarkan konsep Pemerhati dan Observables. Untuk membuat saluran data asas RxJava, anda perlu:

  • Buat yang boleh dipatuhi
  • Beri data yang boleh dipantau untuk memancarkan.
  • Create an Observer
  • Langgan Observer ke Observable.

Sebaik sahaja Observable mempunyai sekurang-kurangnya satu Observer, ia akan mula memancarkan data. Setiap kali Observable memancarkan sekeping data, ia akan memberitahu pelayannya yang ditugaskan dengan memanggil kaedah onNext (), dan Observer kemudiannya akan melakukan beberapa tindakan sebagai tindak balas kepada pelepasan data ini. Setelah Observable telah selesai memancarkan data, ia tidak akan memberitahu Observer dengan memanggil onComplete (). The Observable kemudian akan tamat, dan aliran data akan berakhir.

Jika pengecualian berlaku, maka onError () akan dipanggil, dan Observable akan ditamatkan tanpa memancarkan lebih banyak data atau memanggil onComplete ().

Tetapi RxJava bukan sekadar menyampaikan data dari Observable kepada Observer! RxJava mempunyai koleksi operator yang boleh digunakan untuk menapis, menggabung, dan mengubah data ini. Sebagai contoh, bayangkan aplikasi anda mempunyai butang Pay Now yang mengesan peristiwa onClick di atas, dan anda bimbang bahawa pengguna yang tidak sabar mungkin mengetuk butang berbilang kali, menyebabkan aplikasi anda memproses beberapa pembayaran.

Rx Mari kita ubah cara ini ke dalam aliran data, yang boleh dimanipulasi menggunakan pelbagai operator RxJava. Dalam contoh khusus ini, anda boleh menggunakan operator debounce () untuk menapis pelepasan data yang berlaku secara berturut-turut, jadi walaupun pengguna bashes di butang Pay Now, aplikasinya hanya akan mendaftarkan pembayaran tunggal.

Apakah Manfaat Menggunakan RxJava?

Kami telah melihat bagaimana RxJava boleh membantu anda menyelesaikan masalah tertentu, aplikasi khusus, tetapi adakah ia harus menawarkan projek Android, secara umum?

Rx Bolehkah anda membantu memudahkan kod anda dengan memberi anda cara untuk menulis apa yang anda ingin capai, dan bukannya menulis senarai arahan yang perlu diterapkan oleh aplikasi anda. Contohnya, jika anda menulis mengenai tempoh 500-milisaat, maka anda menulis:

Di samping itu, sejak RxJava merawat hampir segala-galanya sebagai data, ia menyediakan templat yang boleh anda rentang dari peristiwa: membuat Observable, buat Observer, melanggan Observer ke Observable, bilas dan ulangi. Pendekatan formula ini menghasilkan lebih mudah, kod yang boleh dibaca manusia.

Manfaat utama lain untuk pemaju Android adalah bahawa RxJava boleh mengambil banyak kesedihan daripada multithreading di Android. Pengguna mudah alih hari ini adalah aplikasi yang boleh menjadi multitask, jika ia sesuatu yang semudah memuat turun data dalam responsif kepada input pengguna.

Android mempunyai beberapa penyelesaian terbina dalam untuk membuat dan mengurus pelbagai thread, tetapi tidak satu pun daripada ini sangat mudah untuk dilaksanakan, dan mereka dengan cepat boleh menghasilkan kod kompleks yang kompleks yang sukar dibaca dan terdedah kepada kesilapan.

Di RxJava, anda membuat dan menguruskan benang tambahan menggunakan gabungan pengendali dan penjadual. You can easily change the thread where work is performed, using the subscribeOn operator plus a scheduler. For example, here we’re scheduling work to be performed on a new thread:

Anda boleh menentukan bahawa kerja itu perlu diposkan, menggunakan pengendali pemantau. Di sini, kami mempamerkan hasilnya kepada benang UI utama penting Android, dengan menggunakan scheduler AndroidSchedulers.mainThread, yang boleh didapati sebagai sebahagian daripada perpustakaan RxAndroid:

Berbanding dengan penyelesaian multithreading terbina dalam Android, pendekatan Java Rx lebih ringkas dan mudah difahami.

Sekali lagi, anda boleh mengetahui lebih lanjut mengenai bagaimana RxJava berfungsi, dan manfaat menambah perpustakaan ini ke projek anda, dalam Bermula Dengan RxJava 2 untuk Android artikel.

Sekiranya saya Menggunakan RxJava atau RxKotlin?

Oleh kerana Kotlin adalah 100% beroperasi dengan Java, anda boleh menggunakan kebanyakan perpustakaan Java dalam projek Kotlin anda tanpa sebarang kesulitan - dan perpustakaan RxJava tidak terkecuali.

Terdapat perpustakaan RxKotlin yang berdedikasi, yang merupakan pembungkus Kotlin di sekitar perpustakaan RxJava biasa. Pembalut ini menyediakan mengoptimumkan sambungan untuk RxJava untuk persekitaran Kotlin dan boleh digunakan untuk kod boilerplate yang anda perlukan untuk menulis.

Oleh kerana anda boleh menggunakan RxJava di Kotlin tanpa memerlukan RxKotlin, kami akan menggunakan RxJava sepanjang artikel ini, kecuali dinyatakan sebaliknya.

Mewujudkan Pemerhati Mudah dan Observat di Kotlin

Pemerhati dan Observables adalah blok bangunan RxJava, jadi mari bermula dengan membuat:

  • Observable mudah yang menunjukkan aliran data pendek sebagai tindak balas kepada acara butang klik.
  • Data yang boleh ditonton, berbeza dengan mencetak mesej ke Android Studio Logcat.

Tetapi pastikan anda memilih kotak semak Sokong Kotlin sokongan apabila digesa. Seterusnya, buka fail build.gradle projek anda dan tambahkan pustaka RxJava sebagai kebergantungan projek:

Kemudian, buka file project aktivity_main.xml anda dan tambahkan butang yang 'mulakan aliran data:

Terdapat beberapa cara yang berbeza untuk membuat pemerhatian, tetapi satu yang digunakan untuk menukar objek atau senarai objek ke dalam pemerhatian.

Dalam kod berikut, kami mencipta Observable (myObservable) dan memberikan item 1, 2, 3, 4, dan 5 untuk memancarkan. Kami juga mencipta Observer (myObserver), melanggannya ke myObservable, dan kemudian mencantumkannya untuk mencetak mesej untuk log setiap kali ia menerima pelepasan baru.

Anda kini boleh meletakkan aplikasi ini untuk ujian:

  • Pasang projek anda pada telefon pintar Android atau tablet fizikal, atau Peranti Maya Maya (AVD).
  • Berikan butang aliran RxJava Mula satu klik.
  • Buka Monitor Logik Android Studio dengan memilih tab Android Monitor (di mana kursor berada dalam tangkapan skrin berikut) dan kemudian memilih tab Logcat.

Pada titik ini, Observable akan mula memancarkan datanya, dan Observer akan mencetak mesejnya ke Logcat. Output Logout anda harus kelihatan seperti ini:

Check Android Studios Logcat Monitor

Anda boleh memuat turun projek ini dari GitHub jika anda mahu mencuba untuk diri sendiri.

Kotlin Extensions for RxJava

Sekarang kita telah melihat bagaimana untuk membuat saluran RxJava mudah di Kotlin, mari kita melihat bagaimana anda boleh mencapai ini dengan kurang kod, menggunakan fungsi sambungan RxKotlin.

Untuk menggunakan perpustakaan RxCotlin, anda perlu menambahkannya sebagai kebergantungan projek:

Dalam contoh berikut, kami menggunakan fungsi sambungan RxKotlin toObservable () untuk mengubah Senarai ke dalam Observable. Kami juga menggunakan fungsi lanjutan langganan (), kerana ia membolehkan kami membina Observer menggunakan hujah-hujah yang dinamakan, yang menghasilkan kod yang lebih jelas.

Berikut adalah output yang harus anda lihat:

Every time onNext is called the data emission is printed to Android Studios Logcat

Menyelesaikan Terbitan Kedamaian SAM RxJava

RxKotlin also provides an important workaround for the SAM conversion issue that can occur when there are multiple SAM parameter overloads on a given Java method. This SAM ambiguity confuses the Kotlin compiler, as it cannot work out which interface it’s supposed to convert, and your project will fail to compile as a result.

Ketidaktampingan SAM adalah masalah tertentu apabila menggunakan RxJava 2.0 dengan Kotlin, pengendali menggunakan pelbagai jenis SAM-serasi.

Mari lihat masalah penukaran SAM dalam tindakan. Dalam kod berikut, kami menggunakan operator zip () untuk menggabungkan output dua objek yang boleh diperhatikan:

Pengkompil Kotlin untuk membuang ralat kesilapan jenis. Walau bagaimanapun, RxKotlin menyediakan kaedah penolong dan fungsi lanjutan, termasuk Observables.zip (), yang kami gunakan dalam kod berikut:

Inilah output kod ini:

Switch to the Observableszip operator and the Kotlin compiler will no longer throw a type inference error

Kesimpulannya

Dalam tutorial ini, saya menunjukkan kepada anda cara untuk menggunakan perpustakaan RxJava dalam projek Kotlin anda, termasuk perpustakaan sokongan tambahan, seperti RxKotlin dan RxBinding. Kami melihat cara untuk membuat pemerhati mudah dan Observables di Kotlin, untuk mengoptimumkan RxJava untuk platform Kotlin, menggunakan fungsi sambungan.

Setakat ini, kami telah menggunakan Rx untuk membuat Observables mudah yang memancarkan data, dan Pemerhati yang mencetak data ini di Android Studio's Logcat - tetapi ini bukan cara anda menggunakan RxJava di dunia nyata!

Dalam jawatan berikutnya, kita akan melihat bagaimana anda boleh membantu menyelesaikan masalah dunia sebenar? Anda menghadapi ketika membangunkan aplikasi Android. Kami akan menggunakan RxJava dengan Kotlin untuk membuat skrin Daftar Klasik.

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.