آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

اپراتور create

يكشنبه, ۲۶ بهمن ۱۳۹۹، ۰۴:۴۷ ب.ظ

این اپراتور یک observable برای ما میسازد.

 

- نکته ای که داره اینه که این اپراتور مقداری که بهش میدیم (در مثال زیر words) رو وقتی یک observer آن را سابسکرایب میکند، بررسی میکند. (یعنی تا قبل از اینکه کسی سابسکرایب کنه، متد onNext در امیتر نمیدونه چیو میخواد به آبزرور منتشر کنه)

 

- در این اپراتور اگر یک observer سابسکرایب شود، متد subscribe در ObservableOnSubscribe فراخوانی میگردد.

 

- اگر دیتا رو دونه دونه به onNext بدهیم، دونه دونه هم منتشر میشه ولی اگر یک آرایه یا لیست به onNext بدهیم، کل اون رو منتشر میکنه. (یعنی متد onNext در observer فقط یک بار فراخونی میشه) 

 

نکته: چه عناصر رو دونه دونه به onNext اضافه کنیم، چه آرایه رو کلی پاس بدیم متد subscribe در observable فقط یک بار فراخونی میشه. ولی در observable متد onNext به تعداد دیتا (اگر دونه دونه پاس داده شده باشن) فراخونی میشه. یعنی دیتا به صورت sequenial منتشر خواهد شد.

 

توضیح متدهای observer:

به محض سابسکرایب کردن متد onSubscribe فراخونی میشه. دیتاها در متد onNext خونده میشن و اگر خطایی باشه متد onError فراخونی میشه. اگر متد onComplete در observer فراخونی شده باشه، در observer نیز متد onComplete فراخونی میشه.

    String[] words = {"Hi", "Hello", "salam"};

        Observable<String[]> observable = Observable.create(new ObservableOnSubscribe<String[]>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String[]> emitter) throws Throwable {
                emitter.onNext(words);
                Log.d(TAG, ""+words);
                emitter.onComplete();
            }
        });


        observable.subscribe(new Observer<String[]>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull String[] s) {
                Log.d(TAG, ""+s);
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {
                Log.d(TAG, "onComplete");
            }
        });

توضیحات و مثال های خوب codingwithmitch

موافقین ۰ مخالفین ۰ ۹۹/۱۱/۲۶
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی