Android框架学习之RxJava(三)

    xiaoxiao2021-03-25  77

    //这个例子中onNext()会被调用多次 PublishSubject.create() .subscribe(new Subscriber<Object>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { //会被多次调用 } }); Single.just(4).map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return String.valueOf(integer); } }) .subscribe(new SingleSubscriber<String>() { @Override public void onSuccess(String value) { //mValueDisplay.setText(value); } @Override public void onError(Throwable error) { } }); /综合使用 final PublishSubject<String> mSearchResultsSubject = PublishSubject.create(); sub = mSearchResultsSubject .debounce(400, TimeUnit.MILLISECONDS) //这个方法告诉mSearchResultsSubject在没有数据传入达400毫秒时才发送数据 //当用户400ms都没有改变输入内容时,Subject才会发送最新的搜索字符串 .observeOn(Schedulers.io()) //我们想通过RestClient来访问服务器,而因为RestClient涉及IO操作,我们需要在IO Scheduler中进行这个操作,所以要写observeOn(Schedulers.io())。 .map(new Func1<Object, Object>() { @Override public Object call(Object o) { //在map中我们可以调用任意外部方法,这里可以调用任意外部方法 return null;//在这里进行网络请求 } }) .observeOn(AndroidSchedulers.mainThread()) //因为map方法会在IO Scheduler中运行,而我们又要用其返回值填充View, // 所以要重新切换到UI线程,所以要写observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Object>(){ @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Object o) { //在这里展示数据 } }); /** * 如果在doOnSubscribe()之后指定了subscribeOn(),它决定了doOnSubscribe()在哪种线程中执行。 * (1)doOnSubscribe()之前的subscribeOn()不会影响它。 * (2)doOnSubscribe()之后的subscribeOn(),且是最近的才会影响它。 * doOnSubscribe用于在call之前执行一些初始化操作 */ Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { subscriber.onNext(2323); } }).subscribeOn(AndroidSchedulers.mainThread()) // 在doOnSubscribe()之前,不会影响上面的doOnSubscribe() .doOnSubscribe(new Action0() { @Override public void call() { //显示提示框 } }).subscribeOn(Schedulers.io()) // 会影响上面的doOnSubscribe() .observeOn(Schedulers.io()) .subscribeOn(AndroidSchedulers.mainThread()) // 不会影响上面的doOnSubscribe() .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { } });
    转载请注明原文地址: https://ju.6miu.com/read-13651.html

    最新回复(0)