RxJava دارای سه عنصر اصلی است:
1. Observable: مسئول منتشر کردن آیتم ها
2. Subscriber: مصرف کننده آیتم های منتشر شده توسط Observable
3. Schedulers: در واقع همون thread pool هست که برای انجام تسک ها ازش استفاده میشه
RxJava دارای سه عنصر اصلی است:
1. Observable: مسئول منتشر کردن آیتم ها
2. Subscriber: مصرف کننده آیتم های منتشر شده توسط Observable
3. Schedulers: در واقع همون thread pool هست که برای انجام تسک ها ازش استفاده میشه
فلوی اجرای کدهای RxJava به این صورت هست:
اول Observable ساخته میشه، سپس Subscriber (یا همون observable) بهش متصل میشه، پس از آن با توجه به تردی که در subscribeOn مشخص شده، عملیات اپراتورها در آن ترد انجام شده و در نهایت، با توجه به تردی که توسط observeOn معرفی می گردد، در ترد مذکور منتشر می شود.
بنابراین دیتای Observable هنگامی که observer به آن متصل می شود، ارزیابی می گردد. اما در اپراتورهای just و from به این صورت نیست و دیتای observable در لحظه ای که دیتا ساخته می شود، ارزیابی خواهد شد.
این اپراتور دیتای observable را با تاخیری که خودمون مشخص میکنیم منتشر میکنه.
کاربرد:
وقتی کاربر سرچ میکنه، خوب نیست که به ازای هر کاراکتری که مینویسه یه درخواستی به سرور بره. بهتره مثلا بعد از دو ثانیه برای عبارتی که نوشته، یک درخواست سرچ به سرور بره. اینجوری درخواست های بیهوده به سرور نمیره و کدنویسی بهینه تر هست.
این اپراتور عملیات قبلی رو تکرار میکنه و حتما باید روی یک شی observable فراخونی بشه (استاتیک نیست)
در کد زیر محدوده صفر تا 3 را چهار بار چاپ میکند!
آرگومان اول این اپراتور مقدار اولیه و آرگومان دوم تعدادی که باید جلو بره می باشد.
این اپراتور فقط میتونه observable از جنس integer بده (توی api این اپراتور جنریک خروجی از جنس integer است)
این اپراتور خیلی ساده ست. تنها نکته ای که داره اینه که حداکثر ده تا آرگومان قبول میکنه و اینکه اگر یک آرایه بهش پاس بدیم به صورت یک single item اونو انتشار میده.
این اپراتور یک observable برای ما میسازد.
- نکته ای که داره اینه که این اپراتور مقداری که بهش میدیم (در مثال زیر words) رو وقتی یک observer آن را سابسکرایب میکند، بررسی میکند. (یعنی تا قبل از اینکه کسی سابسکرایب کنه، متد onNext در امیتر نمیدونه چیو میخواد به آبزرور منتشر کنه)
اکتیویتی (یا فرگمنت) لایف سایکل داره، بنابراین lifeCycle owner است.
میشه یه کلاسی را به عنوان observer برای اکتیویتی تعریف کرد که براساس state های مختلف عملیات متفاوتی انجام بده.
قدم اول:
برای رتروفیت باید dependency خودش و Gson converter رو اضافه کنیم. Gson converter دیتا مدل جاوا رو به جیسون تبدیل میکنه و برعکس (یعنی جیسون رو از سرور میگیره و به دیتا مدل جاوا تبدیل میکنه). در واقع توی رتروفیت ما با دیتا در قالب جیسون سر و کار نداریم. (در حالی که توی والی باید خودمون جیسون رو به آبجکت جاوایی تبدیل میکردیم و این نقطه مثبت رتروفیت به حساب میاد)
//retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
//gson converter
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'