Struktur dasar
Pertama -tama mari kita lihat kode paling dasar dan analisis bagaimana kode ini diimplementasikan dalam RXJava.
Observable.onsubscribe <string> onsubscribe1 = new Observable.onsubscribe <string> () {@Override public void call (Pelanggan <? Super String> Pelanggan) {Subscriber.onnext ("1"); pelanggan.onCompleted (); }}; Subscriber <String> Subscriber1 = Pelanggan baru <String> () {@Override public void onCompleted () {} @Override public void onError (Throwable e) {} @Override public void onNext (String s) {}}; Observable.create (onSubscriber1).Pertama, mari kita lihat kode yang dapat diamati.
public final static <T> Observable <T> create (Onsubscribe <T> f) {return baru yang dapat diamati <T> (hook.oncreate (f));} Dilindungi yang dapat diamati (Onsubscribe <T> f) {this.onsubscribe = f;} Ini secara langsung memanggil konstruktor yang dapat diamati untuk membuat objek baru yang dapat diamati. Kami sementara menandai objek ini sebagai Observable1 untuk penelusuran kemudian.
Pada saat yang sama, objek berlangganan yang kami lewati akan disimpan dalam properti yang dapat diamati dari Observable1. Properti ini sangat penting dalam konteks berikutnya, harap perhatikan.
Selanjutnya, mari kita lihat metode berlangganan.
Subscribe Langganan Akhir Publik (Pelanggan <? Super T> Pelanggan) {return Observable.subscribe (pelanggan, ini);} Private static <T> berlangganan berlangganan (pelanggan <? Super t> pelanggan, dapat diamati <T> Observable) {... pelanggan.onsart (); hook.onsubscribestArt (dapat diamati, dapat diamati.onsubscribe) .call (pelanggan); return hook.onsubscribereturn (pelanggan);} Seperti yang Anda lihat, setelah berlangganan, metode Observable1.onsubscribe.call dipanggil secara langsung, yang merupakan metode panggilan dari objek Onsubscribe1 dalam kode kami. Parameter yang diteruskan adalah objek pelanggan yang ditentukan dalam kode kami. Apa yang dilakukan dalam metode panggilan adalah memanggil metode onNext dan onComplete dari objek pelanggan yang masuk.
Ini memungkinkan komunikasi antara pengamat dan pengamat. Bukankah itu sangat sederhana?
public void call (Pelanggan <? Super String> Pelanggan) {Subscriber.onnext ("1"); Subscriber.onCompleted ();}Ringkasan Penggunaan RXJAVA
1. Periksa skenario yang di -cache terlebih dahulu
Dapatkan data, pertama -tama periksa apakah ada cache di memori dan kemudian periksa apakah ada kondisi sebelumnya dalam cache file, dan akhirnya, kondisi berikut akan dipenuhi dari jaringan.
akhir yang dapat diamati <string> memori = observable.create (baru observable.onsubscribe <string> () {@Override public void call (Pelanggan <? Super String> Subscriber) {if (memorycache! = null) {pelanggan. Observable. }}); Observable <string> network = Observable.just ("network"); // Hal utama adalah mengandalkan operator CONCAT untuk mengimplementasikan observable.concat (memori, disk, jaringan) .first (). Subscribeon (schedulers.newThread ()) .- MORITLE (SUBLE---- MORYCACLE = "MEMORY"; Systeri.2. Antarmuka perlu menunggu sampai beberapa antarmuka telah mengumpulkan data secara bersamaan sebelum memperbarui
// Pisahkan output dari dua yang dapat diamati, dan pesanan tidak dijamin. Kirim ke Pelanggan dalam urutan peristiwa void testmerge pribadi () {Observable <string> Observable1 = Demoutils.CreateObServable1 (). Subscribeon (scartulers.newthread ()); Observable <String> Observable2 = Demoutils.CreateObServable2 (). Subscribeon (scartulers.newthread ()); Observable.3. Permintaan satu antarmuka tergantung pada data yang dikembalikan oleh permintaan API lain.
Misalnya, setelah kita perlu masuk, kita sering mendapatkan daftar pesan berdasarkan token yang kita dapatkan.
Di sini, RXJava digunakan untuk menyelesaikan masalah callback bersarang. Ada kata benda yang tepat bernama callback neraka
Networkservice.getToken ("nama pengguna", "kata sandi") .flatMap (s -> networkservice.getMessage (s)) .subscribe (s -> {System.out.println ("pesan:" + s);});4. Tombol antarmuka perlu mencegah klik berkelanjutan
Rxview.clicks (findViewById (r.id.btn_throttle)) .throttlefirst (1, timeunit.seconds) .subscribe (hindari -> {System.out.println ("klik");});5. Antarmuka responsif
Misalnya, kotak centang dicentang dan preferensi yang sesuai secara otomatis diperbarui.
SHAREDPREFERENCES Preferensi = PreferenceManager.getDefaultSharedPreferences (this); rxsharedPreferences rxpreferences = rxsharedPreferences.create (preferensi); preferensi <boolean> centang = rxpreferences.getboolean ("chuled", true); centang kotak = (centang = rxpreferences) findViewById (r.id.cb_test); rxCompoundButton.CheckedChanges (kotak centang) .subscribe (checked.asaction ());6. Transformasi Data Kompleks
Observable. .subscribe (System.out :: println); // 9