RXJava的使用
来源:互联网 发布:linux下运行nodejs 编辑:程序博客网 时间:2024/06/05 08:29
RXJava的使用
直接上代码:
package com.example.zhanggang.rxjava2demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import com.google.gson.Gson;import org.reactivestreams.Subscriber;import org.reactivestreams.Subscription;import java.io.IOException;import java.util.ArrayList;import java.util.List;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.ObservableSource;import io.reactivex.Observer;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.disposables.CompositeDisposable;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.Response;/** * by zhanggang */public class MainActivity extends AppCompatActivity { private static final String TAG = "TAG"; private CompositeDisposable compositeDisposable; private Subscription msubscription; String urlPath = "http://v.juhe.cn/toutiao/index?type=top&key=5d5c2fb60a87e4800257c4ad598f5232"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //基本使用// jiben(); //能将数据进行转换 从Integer变成String等 返回的是一个修改后的新数据// map(); //FlatMap 能将数据进行转换 从Integer变成String等 返回的是一个Observable(上游)// flatmap(); //zip 两个上游 一个下游 下游对上游进行匹配输出 当匹配个数不一样时终止// zip(); //背压 意思就是 上游发送的太多 下游处理不过来 异步的时候// backPressure(); //// backPressure2();// flowable(); //只发送long类型的事件// interval(); //OkhttpAndRxJava2 OkhttpAndRxJava2(); } private void OkhttpAndRxJava2() { Observable.create(new ObservableOnSubscribe<Data>() { @Override public void subscribe(ObservableEmitter<Data> e) throws Exception { getData(e); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<Data>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Data value) { Log.e(TAG, value.result.data.get(3).title); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } private void getData(final ObservableEmitter<Data> e) { UrlUtils.sendOkHttpRequest(urlPath, new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { Data data = new Gson().fromJson(response.body().string(), Data.class); e.onNext(data); e.onComplete(); } }); } private void interval() { Flowable.interval(1, TimeUnit.SECONDS).subscribe(new Consumer<Long>() { @Override public void accept(Long aLong) throws Exception { Log.e(TAG, aLong + ""); } }); } private void flowable() { /** * 当模式是ERROE时 flowable只能缓存128个事件 不然抛出missBackpressureException * 当模式是BUFFER时 容器更大 可以存入更多的事件 不会抛出异常 * DROP 降低的意思 下游只接受当前的事件 抛弃之前的事件 * LATEST 每次都会接受最新的一个事件 */ Flowable<Integer> flowable = Flowable.create(new FlowableOnSubscribe<Integer>() { @Override public void subscribe(FlowableEmitter<Integer> e) throws Exception { for (int i = 0; ; i++) {// Log.e(TAG, "emitter" + i); e.onNext(i); } } }, BackpressureStrategy.LATEST); Subscriber<Integer> subscriber = new Subscriber<Integer>() { @Override public void onSubscribe(Subscription s) {// s.request(Long.MAX_VALUE); msubscription = s; } @Override public void onNext(Integer integer) { Log.e(TAG, integer + ""); } @Override public void onError(Throwable t) { Log.e(TAG, "onError"); } @Override public void onComplete() { } }; flowable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } private void backPressure2() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { for (int i = 0; ; i++) { Log.e(TAG, "emitter" + i); e.onNext(i); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .sample(2, TimeUnit.SECONDS) .subscribe(new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Integer value) { Log.e(TAG, value + ""); } @Override public void onError(Throwable e) { Log.e(TAG, "onError"); } @Override public void onComplete() { } }); } private void backPressure() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { for (int i = 0; ; i++) { Log.e(TAG, "emitter" + i); e.onNext(i); } } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { Thread.sleep(2000); Log.e(TAG, integer + ""); } }); } private void zip() { //上游1 Observable<Integer> observable1 = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { Log.e(TAG, "e1"); e.onNext(1); Log.e(TAG, "e2"); e.onNext(2); Log.e(TAG, "e3"); e.onNext(3); Log.e(TAG, "e3"); e.onNext(4); Log.e(TAG, "onComplete"); e.onComplete(); } }).subscribeOn(Schedulers.io()); //上游2 Observable<String> observable2 = Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { Log.e(TAG, "e1"); e.onNext("A"); Log.e(TAG, "e2"); e.onNext("B"); Log.e(TAG, "e3"); e.onNext("C"); Log.e(TAG, "onComplete"); e.onComplete(); } }).subscribeOn(Schedulers.io()); Observable.zip(observable1, observable2, new BiFunction<Integer, String, String>() { @Override public String apply(Integer integer, String s) throws Exception { return integer + s; } }).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { Log.e(TAG, s); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.e(TAG, throwable + ""); } }); } private void flatmap() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { Log.e(TAG, Thread.currentThread().getName()); Log.e(TAG, "e1"); e.onNext(1); Log.e(TAG, "e2"); e.onNext(2); Log.e(TAG, "e3"); e.onNext(3); e.onComplete(); } }).concatMap(new Function<Integer, ObservableSource<String>>() { @Override public ObservableSource<String> apply(Integer integer) throws Exception { List<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++) { list.add(integer + "aaaaa"); } return Observable.fromIterable(list).delay(1, TimeUnit.SECONDS); } }).subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { Log.e(TAG, s); } }); } private void map() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { Log.e(TAG, Thread.currentThread().getName()); Log.e(TAG, "e1"); e.onNext(1); Log.e(TAG, "e2"); e.onNext(2); Log.e(TAG, "e3"); e.onNext(3); e.onComplete(); } }).map(new Function<Integer, String>() { @Override public String apply(Integer integer) throws Exception { return integer + "姓名"; } }).subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { Log.e(TAG, s); } }); } private void jiben() { Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitter<String> e) throws Exception { Log.e(TAG, Thread.currentThread().getName()); Log.e(TAG, "observer1"); e.onNext("张三"); Log.e(TAG, "observer2"); e.onNext("李四"); Log.e(TAG, "observer3"); e.onNext("王五"); e.onComplete(); Log.e(TAG, "observer4"); e.onNext("马六"); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<String>() { @Override public void onSubscribe(Disposable d) { compositeDisposable = new CompositeDisposable(d); } @Override public void onNext(String value) { Log.e(TAG, Thread.currentThread().getName()); Log.e(TAG, "observer接收" + value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }); } @Override protected void onDestroy() { super.onDestroy(); compositeDisposable.clear(); } public void onClick(View view) { msubscription.request(128); }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.zhanggang.rxjava2demo.MainActivity"> <Button android:onClick="onClick" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮"/></LinearLayout>
okhttp网络请求工具类
package com.example.zhanggang.rxjava2demo;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;/** * 工具类 * Created by zhanggang on 2017/9/28. */public class UrlUtils { public static void sendOkHttpRequest(String address, Callback callback){ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(address) .build(); client.newCall(request).enqueue(callback); }}Bean类
package com.example.zhanggang.rxjava2demo;import com.google.gson.Gson;import java.util.List;/** * bean类 * Created by zhanggang */public class Data { public String reason; public ResultBean result; public int error_code; public static Data objectFromData(String str) { return new Gson().fromJson(str, Data.class); } public static class ResultBean { public String stat; public List<DataBean> data; public static ResultBean objectFromData(String str) { return new Gson().fromJson(str, ResultBean.class); } public static class DataBean { public String uniquekey; public String title; public String date; public String category; public String author_name; public String url; public String thumbnail_pic_s; public String thumbnail_pic_s02; public String thumbnail_pic_s03; public static DataBean objectFromData(String str) { return new Gson().fromJson(str, DataBean.class); } } }}相关的使用就都完成了!
阅读全文
1 0
- rxJava的使用
- RxJava的使用
- RxJava 的使用入门
- RxJava 的使用入门
- RxJava的基本使用
- RxJava 的使用入门
- RxJava的使用
- RxJava+RxBus的使用
- RxJava的简单使用
- Rxjava merge的使用
- Retrofit+RxJava的使用
- RxJava的使用
- RxJava的基本使用
- RxJava的简单使用
- Rxjava的使用
- RxJava的基本使用
- RxJava的使用
- RxJava的使用详解
- hdu 1297 Children’s Queue
- 服务器vsphere虚拟化硬盘读写测评
- windbg小工具umdh查找内存泄露
- C语言输出打印一个菱形
- Hibernate框架的查询方式**
- RXJava的使用
- 用数组模拟大数加法模板
- 欢迎使用Markdown编辑器写博客
- linux下socket编程读写函数
- opencv基本绘图函数--点,线,矩形,圆等
- 关于Opencv中Rect和Rectangle函数
- 在JSP使用EL和JSTL判断指定元素是否存在于指定集合中
- 1
- 【Spring】The Task namespace