آموزش Rxjava در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش Rxjava در برنامه نویسی اندروید می پردازیم در مطالب قبلی Rxjava را به طور کامل تشریح کردیم در امروز نحوه استفاده از Rxjava را یاد خواهید گرفت از Rxjava یا reqctive extensions به منظور حل سریع مشکللات و سادگی در خواندن در برنامه نویسی کمک می کند در ادامه با ما همراه باشید.
ابتدا مقاله زیر را مطالعه کنید سپس این مطلب را ادامه دهید. (بخش Observables و Subscribers در این بخش توضیح داده نمی شود حتما مطلب را مطالعه کنید)
Rxjava چیست ؟
اگر بخوام باهاتون صادق باشیم اول که Rxjava را می بینید فکر می کنید خیلی سخت و غیر قابل درک است اما بعد از کمی کار کردن متوجه می شوید حتی از متودهای داخلی اندروید نیز راحت تر است و البته از ویژگی های آن حجم کمتر سرعت اجرای بالاتر را می توان نام برد.
ابتدا باید آن را به پروژه اندرویدی خود اضافه کنید برای اینکار وارد فایل Build.gradle از نوع Module شده سپس در بخش dependencies خط زیر را اضافه کنید.
1 | compile "io.reactivex.rxjava2:rxjava:2.1.9" |
پروژه را sync کنید.
ابتدا به یک مثال ساده HelloWorld می پردازیم.
1 | Flowable.just("Hello world").subscribe(System.out::println); |
در بالا فقط اومیدم یک مقدار را در output چاپ کردیم.
یک مثال ساده تر
1 2 3 4 | Flowable<String> source = Flowable.fromCallable(() -> { Thread.sleep(1000); // imitate expensive computation return "Done"; }); |
در بالا ما یک ثاتیه صبر می کنیم سپس مقدار done برای ما return می شود.
خب حالا برای اینکه آن را اجرا کنیم می توانیم از دو نوع کد استفاده کنیم .
راه حل اول برای اینکه یک کاری را در background انجام بدیم باید از کد زیر استفاده کنیم مثلا می خوایم کار بالا در background اجرابشه
1 | Flowable<String> runBackground = source.subscribeOn(Schedulers.io()); |
حالا اگر بخوایم یک کاری در foreground یا پیش زمینه یا Gui یا Ui را تغییر دهیم می توانیم از کد زیر استفاده کنیم.
1 | Flowable<String> showForeground = runBackground.observeOn(Schedulers.single()); |
پس subscribeOn برای انجام یک کار در background مورد استفاده قرار می گیرد و observeOn در foreground
برویم سراغ یک مثال کاربردی یک Subscriber همانند زیر ایجاد کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 | Subscriber integerSubscriber = new Subscriber() { @Override public void onCompleted() { System.out.println("Complete!"); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer value) { System.out.println("onNext: " + value); } }; |
ما یک Subscriber شامل سه متود ساختیم همانند بالا حالا می خوایم در یک Observable از آن استفاده کنیم کد زیر را مشاهده کنید.
1 2 3 4 5 6 7 8 9 | Observable integerObservable = Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber subscriber) { subscriber.onNext(1); subscriber.onNext(2); subscriber.onNext(3); subscriber.onCompleted(); } }); |
در بالا آمدیم از متودهایی که در Subscriber ساخته بودیم استفاده کردیم (از onNrext و onCompleted)
و در آخر مثل زیر آن را execute می کنیم.
1 | integerObservable.subscribe(integerSubscriber); |
و در نهایت خروجی ما همانند زیر می شود.
1 2 3 4 5 | // Outputs: // onNext: 1 // onNext: 2 // onNext: 3 // Complete! |
اگر بخواهیم مستقیم از Observable استفاده کنیم می توانیم مثل زیر عمل کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 | Observable.just(1, 2 ,3).subscribe(new Subscriber() { @Override public void onCompleted() { System.out.println("Complete!"); } @Override public void onError(Throwable e) {} @Override public void onNext(Integer value) { System.out.println("onNext: " + value); } }); |
از just استفاده کردیم سپس یک Subscriber در آن new کردیم.
حالا شاید بپرسید کجا operation یا عملیات را انجام دهیم rxjava فکر آن را نیز کرده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Observable.just(1, 2, 3, 4, 5, 6) // add more numbers .filter(new Func1() { @Override public Boolean call(Integer value) { return value % 2 == 1; } }) .subscribe(new Subscriber() { @Override public void onCompleted() { System.out.println("Complete!"); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer value) { System.out.println("onNext: " + value); } }); |
در بالا با استفاده از filter میگیم مثلا یک operation را بروی اعداد ورودی برایمان انجام دهد. در اینجا مقدار true برای اعداد فرد برمی گردد و برای اعداد زوج مقدار false برمیگردد.
Rxjava بسیار وسیع است سعی می شود در بخش های متفاوت کاربردهای دیگر آن را نیز قرار دهیم.
موفق باشید.
سلام
من موقع ساخت Observable به مشکل بر خوردم. در دستور ()new Observable.OnSubscribe ،
Onsubscribe() ایجاد نمی شود و قرمز رنگ هست.
لطفا راهنمایی کنید.
;import io.reactivex.schedulers.Schedulers
این خط رو ایمپورت کن مشکلت حل میشه