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);            }        }    }}
 相关的使用就都完成了!

原创粉丝点击