最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rxjava功能操作符的使用方法詳解

 更新時(shí)間:2017年11月11日 14:29:28   作者:Genten程澤翔  
這篇文章主要介紹了Rxjava功能操作符的使用方法詳解,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。

Rxjava功能個(gè)人感覺(jué)很好用,里面的一些操作符很方便,Rxjava有:被觀察者,觀察者,訂閱者,

被觀察者通過(guò)訂閱者訂閱觀察者,從而實(shí)現(xiàn)觀察者監(jiān)聽被觀察者返回的數(shù)據(jù)

下面把Rxjava常用的模型代碼列出來(lái),還有一些操作符的運(yùn)用:

依賴:

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
  compile 'io.reactivex.rxjava2:rxjava:2.1.5'

這個(gè)是另一種解析數(shù)據(jù)的方法,阿里巴巴旗下的,聽說(shuō)是解析最快的解析器。。。。

compile 'com.alibaba:fastjson:1.2.39'
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
 
import com.alibaba.fastjson.JSONObject;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import io.reactivex.FlowableOnSubscribe;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
public class MainActivity extends AppCompatActivity {
 
  private TextView name;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    name = (TextView) findViewById(R.id.name);
    //用來(lái)調(diào)用下面的方法,監(jiān)聽。
    name.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
 
        interval();
      }
    });
  }
 
  //例1:Observer
  public void observer() {
    //觀察者
    Observer<string> observer = new Observer<string>() {
      @Override
      public void onSubscribe(@NonNull Disposable d) {
 
      }
      @Override
      public void onNext(@NonNull String s) {
        //接收從被觀察者中返回的數(shù)據(jù)
        System.out.println("onNext :" + s);
      }
      @Override
      public void onError(@NonNull Throwable e) {
 
      }
      @Override
      public void onComplete() {
 
      }
    };
    //被觀察者
    Observable<string> observable = new Observable<string>() {
      @Override
      protected void subscribeActual(Observer<!--? super String--> observer) {
        observer.onNext("11111");
        observer.onNext("22222");
        observer.onComplete();
      }
    };
    //產(chǎn)生了訂閱
    observable.subscribe(observer);
  }
 
  //例2:Flowable
  private void flowable(){
    //被觀察者
    Flowable.create(new FlowableOnSubscribe<string>() {
      @Override
      public void subscribe(@NonNull FlowableEmitter<string> e) throws Exception {
        for (int i = 0; i < 100; i++) {
          e.onNext(i+"");
        }
      }
      //背壓的策略,buffer緩沖區(qū)        觀察者
      //背壓一共給了五種策略
      // BUFFER、
      // DROP、打印前128個(gè),后面的刪除
      // ERROR、
      // LATEST、打印前128個(gè)和最后一個(gè),其余刪除
      // MISSING
      //這里的策略若不是BUFFER 那么,會(huì)出現(xiàn)著名的:MissingBackpressureException錯(cuò)誤
    }, BackpressureStrategy.BUFFER).subscribe(new Consumer<string>() {
      @Override
      public void accept(String s) throws Exception {
        System.out.println("subscribe accept"+s);
        Thread.sleep(1000);
      }
    });
  }
 
  //例3:線程調(diào)度器 Scheduler
  public void flowable1(){
    Flowable.create(new FlowableOnSubscribe<string>() {
      @Override
      public void subscribe(@NonNull FlowableEmitter<string> e) throws Exception {
        for (int i = 0; i < 100; i++) {
          //輸出在哪個(gè)線程
          System.out.println("subscribe Thread.currentThread.getName = " + Thread.currentThread().getName());
          e.onNext(i+"");
        }
      }
    },BackpressureStrategy.BUFFER)
        //被觀察者一般放在子線程
        .subscribeOn(Schedulers.io())
        //觀察者一般放在主線程
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<string>() {
          @Override
          public void accept(String s) throws Exception {
            System.out.println("s"+ s);
            Thread.sleep(100);
            //輸出在哪個(gè)線程
            System.out.println("subscribe Thread.currentThread.getName = " + Thread.currentThread().getName());
          }
        });
  }
 
 
  //例4:http請(qǐng)求網(wǎng)絡(luò),map轉(zhuǎn)化器,fastjson解析器
  public void map1(){
    Observable.create(new ObservableOnSubscribe<string>() {
      @Override
      public void subscribe(@NonNull final ObservableEmitter<string> e) throws Exception {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
            .url("https://qhb.2dyt.com/Bwei/login")
            .build();
        client.newCall(request).enqueue(new Callback() {
          @Override
          public void onFailure(Call call, IOException e) {
 
          }
 
          @Override
          public void onResponse(Call call, Response response) throws IOException {
            String result = response.body().string();
            e.onNext(result);
          }
        });
      }
    })
        //map轉(zhuǎn)換器 flatmap(無(wú)序),concatmap(有序)
        .map(new Function<string, bean="">() {
      @Override
      public Bean apply(@NonNull String s) throws Exception {
        //用fastjson來(lái)解析數(shù)據(jù)
        return JSONObject.parseObject(s,Bean.class);
      }
    }).subscribe(new Consumer<bean>() {
      @Override
      public void accept(Bean bean) throws Exception {
        System.out.println("bean = "+ bean.toString() );
      }
    });
  }
 
  //常見rxjava操作符
  //例 定時(shí)發(fā)送消息
  public void interval(){
    Observable.interval(2,1, TimeUnit.SECONDS)
        .take(10)
        .subscribe(new Consumer<long>() {
          @Override
          public void accept(Long aLong) throws Exception {
            System.out.println("aLong = " + aLong);
          }
        });
  }
 
 
  //例 zip字符串合并
  public void zip(){
    Observable observable1 = Observable.create(new ObservableOnSubscribe<string>() {
      @Override
      public void subscribe(@NonNull ObservableEmitter<string> e) throws Exception {
        e.onNext("1");
        e.onNext("2");
        e.onNext("3");
        e.onNext("4");
        e.onComplete();
 
      }
    });
    Observable observable2 = Observable.create(new ObservableOnSubscribe<string>() {
      @Override
      public void subscribe(@NonNull ObservableEmitter<string> e) throws Exception {
        e.onNext("A");
        e.onNext("B");
        e.onNext("C");
        e.onNext("D");
        e.onComplete();
      }
    });
 
    Observable.zip(observable1, observable2, new BiFunction<string,string,string>() {
      @Override
      public String apply(@NonNull String o, @NonNull String o2) throws Exception {
        return o + o2;
      }
    }).subscribe(new Consumer<string>() {
      @Override
      public void accept(String o) throws Exception {
        System.out.println("o"+ o);
      }
    });
  }

總結(jié)

以上就是本文關(guān)于Rxjava功能操作符的使用方法詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Javaweb應(yīng)用使用限流處理大量的并發(fā)請(qǐng)求詳解、分享一個(gè)簡(jiǎn)單的java爬蟲框架、Java線程之線程同步synchronized和volatile詳解等,有什么問(wèn)題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)

    Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)

    這篇文章主要給大家介紹了關(guān)于Okhttp在SpringBoot中應(yīng)用實(shí)戰(zhàn)的相關(guān)資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請(qǐng)求和處理響應(yīng),OkHttp是一個(gè)高效、易用的HTTP客戶端庫(kù),它具有簡(jiǎn)潔的API和強(qiáng)大的功能,需要的朋友可以參考下
    2023-12-12
  • Java在運(yùn)行時(shí)識(shí)別類型信息的方法詳解

    Java在運(yùn)行時(shí)識(shí)別類型信息的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java在運(yùn)行時(shí)識(shí)別類型信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2019-01-01
  • SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的示例詳解

    SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的示例詳解

    Springboot國(guó)際化可以幫助使用者在不同語(yǔ)言環(huán)境中構(gòu)建應(yīng)用程序,這樣應(yīng)用程序可以有效地適應(yīng)不同語(yǔ)言文化背景下的用戶需求。本文主要介紹了SpringBoot實(shí)現(xiàn)前后端分離國(guó)際化的方法,需要的可以參考一下
    2023-02-02
  • Java發(fā)起http請(qǐng)求的完整步驟記錄

    Java發(fā)起http請(qǐng)求的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Java發(fā)起http請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • java工具類static靜態(tài)方法讀取yml配置過(guò)程

    java工具類static靜態(tài)方法讀取yml配置過(guò)程

    文章介紹了在工具類中獲取YAML配置時(shí)遇到的問(wèn)題,由于變量是靜態(tài)的,而Spring加載靜態(tài)方法比IOC容器早,導(dǎo)致無(wú)法直接使用@Value注解讀取YAML配置,從而讀取結(jié)果為null
    2024-11-11
  • 輕松掌握J(rèn)ava適配器模式

    輕松掌握J(rèn)ava適配器模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava適配器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 使用dom4j解析xml文件,并轉(zhuǎn)出json格式問(wèn)題

    使用dom4j解析xml文件,并轉(zhuǎn)出json格式問(wèn)題

    這篇文章主要介紹了使用dom4j解析xml文件,并轉(zhuǎn)出json格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Mybatis實(shí)現(xiàn)一對(duì)一查詢映射處理

    Mybatis實(shí)現(xiàn)一對(duì)一查詢映射處理

    MyBatis是一種流行的Java持久化框架,它提供了靈活而強(qiáng)大的查詢映射功能,本文主要介紹了Mybatis實(shí)現(xiàn)一對(duì)一查詢映射處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java 泛型總結(jié)及詳解

    Java 泛型總結(jié)及詳解

    這篇文章主要介紹了Java 泛型的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考下
    2016-09-09
  • SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說(shuō)明

    SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說(shuō)明

    這篇文章主要介紹了SpringRunner和SpringJUnit4ClassRunner的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

怀远县| 武安市| 永济市| 偃师市| 贵港市| 荣昌县| 靖江市| 泽州县| 舞钢市| 渭南市| 杭锦旗| 达州市| 陕西省| 桦南县| 蓬安县| 同仁县| 中超| 许昌县| 象山县| 鄂尔多斯市| 沂源县| 岑溪市| 喀喇| 仲巴县| 上思县| 含山县| 利辛县| 天祝| 马龙县| 章丘市| 扎赉特旗| 成武县| 沾化县| 阜城县| 南岸区| 辽宁省| 南部县| 黄大仙区| 安平县| 太康县| 兴国县|