<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      奶霸000

      導航

      RxJava

      public class LoginActivity extends BaseActivity implements LoginView {


      Handler handler = new Handler();

      @Override
      protected int getLayoutId() {
      return R.layout.activity_main;
      }

      @Override
      protected void initDatas() {
      /**
      * 1、初始的RxJava
      */
      // rxJavaDemo();
      /**
      * 2、簡潔版的RxJava
      */
      // rxJavaDemo_concise();
      /**
      * 3、用操作符來進行操作Rxjava
      */
      // rxJavaDemo_operator();


      /**
      * 4、深的操作符號(*****)
      */
      // rxJavaDemo_operator_more();

      /**
      * 5、更深的操作符號(主要是講 onComplete()和onError() )
      * 這兩個函數用來通知訂閱者,被觀察的對象將停止發送數據以及為什么停止(成功的完成或者出錯了)。
      *
      * 還有RxJava 線程調度的問題
      */
      // rxJavaDemo_operator_more_more();

      /***
      * Rxjava 在Android 中應用
      */
      rxJavaDemo_operator_more_more_android();

      }


      /**
      * 接著要介紹的就是AndroidObservable,它提供了跟多的功能來配合Android的生命周期。
      * bindActivity()和bindFragment()方法默認使用AndroidSchedulers.mainThread()來執行觀察者代碼,這兩個方法會在Activity或者Fragment結束的時候通知被觀察者停止發出新的消息。
      */
      private void rxJavaDemo_operator_more_more_android() {

      }

      private void rxJavaDemo_operator_more_more() {
      Subscription a = Observable.just("這個在的線程是:").subscribeOn(Schedulers.io())//訂閱者發生在 工作線程中 即io
      .observeOn(AndroidSchedulers.mainThread())//發生在主線程中 即 觀察者 在 main線程中
      .subscribe(s -> showMessagers(s));
      //停止當前的操作 RxJava的另外一個好處就是它處理unsubscribing的時候,會停止整個調用鏈。
      // 如果你使用了一串很復雜的操作符,調用unsubscribe將會在他當前執行的地方終止。不需要做任何額外的工作!
      // a.unsubscribe();
      new View(this).postDelayed(() -> a.unsubscribe(), 2000);

      }

      /**
      * 相比更加詳細的操作符學習
      */
      private void rxJavaDemo_operator_more() {
      // Observable.from()方法,它接收一個集合作為輸入,然后每次輸出一個元素給subscriber:
      // ArrayList<String> list = new ArrayList<>();
      //
      // list.add("d");
      // list.add("ddddd");
      // String[] arrays = {"d", "b"};
      // Observable.from(list).subscribe(s -> showMessagers(s));

      //將list數據給觀察者 這個為比較復雜的寫法了
      getDbDatas().subscribe(listData -> {
      Observable.from(listData).subscribe(listSring -> showMessagers(listSring));
      });
      /**
      * 這個是用flatmap寫的 相對來說要簡單很多
      */
      getDbDatas().flatMap(new Func1<List<String>, Observable<String>>() {
      @Override
      public Observable<String> call(List<String> strings) {
      return Observable.from(strings);
      }
      }).subscribe(s -> showMessagers(s));
      /**
      * 用蘭博啦來寫就更簡單了
      */
      getDbDatas().flatMap(listData -> Observable.from(listData)).subscribe(listString -> showMessagers(listString));


      /**
      * 接著前面的例子,現在我不想打印URL了,而是要打印收到的每個網站的標題。
      * 問題來了,我的方法每次只能傳入一個URL,并且返回值不是一個String,
      * 而是一個輸出String的Observabl對象。使用flatMap()可以簡單的解決這個問題。
      */

      getDbDatas().flatMap(stringList -> Observable.from(stringList)).flatMap(stringData -> getTitle(stringData)).subscribe(title -> showMessagers(title));

      /**
      * filter()輸出和輸入相同的元素,并且會過濾掉那些不滿足檢查條件的。
      * take()如果我們只想要最多5個結果:
      * doOnNext()允許我們在每次輸出一個元素之前做一些額外的事情,比如這里的保存標題。
      */
      getDbDatas().flatMap(stringList -> Observable.from(stringList)).flatMap(stringData -> getTitle(stringData)).filter(title -> title != null).take(5).doOnNext(title -> saveTitle(title)).subscribe(title -> showMessagers(title));


      }


      /**
      * 保存標題等操作
      */
      public void saveTitle(String t) {

      }

      /**
      * 根據 string 串來進行查詢Title
      */
      Observable<String> getTitle(String URL) {
      String data = "data";
      return Observable.just(data);
      }


      /**
      * 返回Observable<String>數據
      *
      * @return
      */
      public Observable<String> getStringData() {
      return Observable.just("數據");
      }


      /**
      * 得到Observable<List<String>>對象
      *
      * @return
      */
      public Observable<List<String>> getDbDatas() {
      List listData = new ArrayList();
      listData.add("a");
      listData.add("b");
      listData.add("c");
      listData.add("d");
      return Observable.just(listData);
      }


      /**
      * 用RxJava中操作符來進行操作 map就是來進行對observable改變的 map()操作符就是用于變換Observable對象的
      */
      private void rxJavaDemo_operator() {
      Observable.just("這個是操作符的操作哦").map(s -> s + "demo").subscribe(s -> showMessagers(s));
      Observable.just("操作符號哦222222").map(s -> s.hashCode()).subscribe(s -> showMessagers(s.toString()));//中間對 observable 進行改變 變成hash 值
      Observable.just("操作符號哦3333復雜的").map(s -> s.hashCode()).map(i -> Integer.toString(i)).subscribe(s -> showMessagers(s));//連續兩個map進行轉接
      }

      /**
      * 簡潔版本的 RxJava
      */
      private void rxJavaDemo_concise() {
      /**
      * 比如Observable.just就是用來創建只發出一個事件就結束的Observable對象,上面創建Observable對象的代碼可以簡化為一行
      */
      Observable<String> myObservable = Observable.just("這個是只發出一個事件的-->這個是RxJava");
      /**
      * 接下來看看如何簡化Subscriber,上面的例子中,我們其實并不關心OnComplete和OnError,我們只需要在onNext的時候做一些處理,這時候就可以使用Action1類。
      */
      Action1<String> onNextAction = new Action1<String>() {
      @Override
      public void call(String s) {
      //相當于Subscriber中的接受
      Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show();
      }
      };
      myObservable.subscribe(onNextAction);

      //其實上面的完全可以寫成這樣的哦
      Observable.just("結合到一起的寫法").subscribe(new Action1<String>() {
      @Override
      public void call(String s) {
      Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show();
      }
      });
      //或者用lambda表達式的寫法 這個就更簡單了哦~~~~
      Observable.just("lambda表達式的寫法 看看星星").subscribe(s -> Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show());


      }


      /**
      * Observable 被觀察者 Subscribers 觀察者
      */
      private void rxJavaDemo() {
      /**
      * 創建觀察者模式 --> 被觀察者
      *
      * 一個Observable可以發出零個或者多個事件,知道結束或者出錯。
      * 每發出一個事件,就會調用它的Subscriber的onNext方法,最后調用Subscriber.onNext()或者Subscriber.onError()結束。
      */
      Observable<String> myObservable = Observable.create(new Observable.OnSubscribe<String>() {
      @Override
      public void call(Subscriber<? super String> subscriber) {
      subscriber.onNext("這是RxJava");
      subscriber.onCompleted();
      }
      });
      /**
      * 接著我們創建一個Subscriber來處理Observable對象發出的字符串。
      *
      */
      Subscriber<String> mySubscriber = new Subscriber<String>() {
      @Override
      public void onCompleted() {
      Toast.makeText(LoginActivity.this, "完成啦...", Toast.LENGTH_SHORT).show();
      }

      @Override
      public void onError(Throwable e) {

      }

      @Override
      public void onNext(String s) {
      Toast.makeText(LoginActivity.this, s, Toast.LENGTH_SHORT).show();
      }
      };
      /**
      * 這里subscriber僅僅就是打印observable發出的字符串。
      * 通過subscribe函數就可以將我們定義的myObservable對象和mySubscriber對象關聯起來,這樣就完成了subscriber對observable的訂閱。
      */
      myObservable.subscribe(mySubscriber);

      }

      @Override
      protected void initListeners() {

      }

      @Override
      protected void initViews(Bundle savedInstanceState) {

      }

      @Override
      public void showMessagers(String message) {
      Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
      }

      posted on 2017-02-16 14:17  奶霸000  閱讀(135)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 少妇高潮尖叫黑人激情在线 | 野外做受三级视频| 国产日产欧产精品精品| 国产亚洲另类无码专区| 亚洲中文日韩一区二区三区| 亚洲另类在线制服丝袜国产| 俺也来俺也去俺也射| 国产色一区二区三区四区| 屁屁影院ccyy备用地址| 香蕉久久夜色精品国产成人| 男人的天堂av社区在线| 少妇无套内谢免费视频| jizz国产免费观看| 狠狠人妻久久久久久综合九色 | 伊人久久精品一区二区三区| 日韩加勒比一本无码精品| 福利一区二区不卡国产| 免费看婬乱a欧美大片| 欧美牲交a欧美在线| 久久国内精品一区二区三区| 无码国模国产在线观看免费| 国产在线精品中文字幕| 亚洲中文一区二区av| 色又黄又爽18禁免费网站现观看| 中文字幕人妻有码久视频| 波多野结衣免费一区视频| 国产麻豆放荡av激情演绎| 国产高清在线不卡一区| 日本一区不卡高清更新二区| 精品国产一区二区色老头| 日本亚洲一区二区精品| 人人玩人人添人人澡超碰| 亚洲av永久无码精品天堂久久| 国产视频一区二区| 久久精品日日躁夜夜躁 | 国内少妇偷人精品视频| 人妻精品久久无码专区涩涩| 亚洲欧美牲交| 巨胸喷奶水视频www免费网站| 3d全彩无码啪啪本子全彩| 中文字幕人妻在线精品|