الهيكل الأساسي
دعونا نلقي نظرة أولاً على الرمز الأساسي ونحلل كيفية تنفيذ هذا الرمز في RXJAVA.
obsertable.onsubscribe <string> OnSubScribe1 = new obsertable.onsubscribe <string> () {Override public void call (المشترك <؟ super string> مشترك) {مشترك. onnext ("1") ؛ المشترك. onCompleted () ؛ }} ؛ المشترك <string> مشترك = مشترك جديد <string> () {Override public void onCompleted () {} Override public void onerror (throwable e) {} @ @over void onnext (string s) {}} ؛أولاً ، دعونا نلقي نظرة على رمز الملاحظة. إنشاء
الثابت النهائي العام <T> يمكن ملاحظته <T> إنشاء (OnSubscribe <T> f) {إرجاع جديد يمكن ملاحظته <T> (hook.oncreate (f)) ؛} محمي (OnSubscribe <T> f) {this.onsubscribe = f ؛} يدعو مباشرة مُنشئه لإنشاء كائن جديد يمكن ملاحظته. نقوم بمناسبة هذا الكائن مؤقتًا على أنه يمكن ملاحظته 1 للتتبع لاحقًا.
في الوقت نفسه ، سيتم حفظ كائن OnSubscribe الذي مررنا به في خاصية OnSubscribe لـ Observable1. هذه الخاصية مهمة جدًا في السياق اللاحق ، يرجى الانتباه.
بعد ذلك ، دعونا نلقي نظرة على طريقة الاشتراك.
اشتراك الاشتراك النهائي العام (المشترك <؟ super t> المشترك) {return robarleable.subscribe (المشترك ، هذا) ؛} الاشتراك الثابت الخاص <T> الاشتراك الخاص (المشترك <؟ super t> المشترك ، قابل للملاحظة <T> قابلة للملاحظة) hook.onsubscribestart (يمكن ملاحظتها ، يمكن ملاحظتها. إرجاع hook.onsubscribereturn (مشترك) ؛} كما ترون ، بعد الاشتراك ، تسمى طريقة الملاحظة 1.onsubscribe.call مباشرة ، وهي طريقة استدعاء كائن OnSubscribe1 في الكود الخاص بنا. المعلمات التي تم تمريرها هي كائن المشترك المحدد في الكود الخاص بنا. ما يتم القيام به في طريقة الاتصال هو استدعاء أساليب OnNext و OnComplete للكائن المشترك الوارد.
هذا يتيح التواصل بين المراقب والمراقب. أليس الأمر بسيطًا جدًا؟
مكالمة باطلة عامة (المشترك <؟ super string> مشترك) {مشترك. onnext ("1") ؛ المشترك. onCompleted () ؛}ملخص سيناريو استخدام Rxjava
1. تحقق من السيناريو المخبوق أولاً
احصل على البيانات ، تحقق أولاً مما إذا كان هناك ذاكرة التخزين المؤقت في الذاكرة ، ثم تحقق مما إذا كان هناك أي شرط سابق في ذاكرة التخزين المؤقت للملف ، وأخيراً ، سيتم استيفاء الشرط التالي من الشبكة.
نهائي يمكن ملاحظته <String> الذاكرة = obsertable.create (new obsertable.onsubscribe <string> () {Override public void call (المشترك <؟ super string> مشترك) {if (memoryCache! = null) Obsertable.onsubscribe <string> () }}) ؛ يمكن ملاحظته <string> network = obsertable.just ("الشبكة") ؛ // الشيء الرئيسي هو الاعتماد على المشغل المسلسل لتنفيذ الملاحظة.2. تحتاج الواجهة إلى الانتظار حتى تقوم واجهات متعددة بجمع البيانات بشكل متزامن قبل التحديث
// تقسيم إخراج اثنين من الملاحظات ، والترتيب غير مضمون. أرسل إلى المشترك بترتيب أحداث private void testmerge () {opperiable <string> arospal1 = demoutils.createBservable1 (). اشتراك (Schedulers.NewThread ()) ؛ يمكن ملاحظته <STRING> قابلة للملاحظة 2 = demoutils.createBservable2 (). الاشتراك (Schedulers.NewThread ()) ؛ قابل للملاحظة.3. يعتمد طلب واجهة واحدة على البيانات التي يتم إرجاعها بواسطة طلب API آخر.
على سبيل المثال ، بعد أن نحتاج إلى تسجيل الدخول ، غالبًا ما نحصل على قائمة الرسائل بناءً على الرمز المميز الذي نحصل عليه.
هنا ، يتم استخدام Rxjava لحل مشكلة عمليات الاسترجاعات المتداخلة. هناك اسم مناسب يسمى Callback Hell
NetWorkservice.getToken ("username" ، "password") .flatmap (s -> networkservice.getMessage (s)) .subscribe (s -> {system.out.println ("message:" + s) ؛}) ؛4. زر الواجهة يحتاج إلى منع النقرات المستمرة
rxview.clicks (findViewById (r.id.btn_throttle)) .ThrottleFirst (1 ، timeUnit.Seconds) .Subscribe (تجنب -> {system.out.println ("Click") ؛}) ؛5. واجهة استجابة
على سبيل المثال ، يتم فحص مربع الاختيار ويتم تحديث التفضيل المقابل تلقائيًا.
تفضيلات sharedPreferences = PRIEFENCEMENAGER.GETDEFAULTSHAREDERFERENCES (هذا) ؛ rxsharedPreferences rxpreferences = rxsharedpreferences.create (تفضيلات) FindViewById (r.id.cb_test) ؛ rxCompoundButton.CheckedChanges (مربع الاختيار) .subscribe (checked.asaction ()) ؛
6. تحويل البيانات المعقدة
يمكن ملاحظته. .subscribe (system.out :: println) ؛ // 9