RxJava + OkHttp

来源:互联网 发布:mac ae2017cc安装失败 编辑:程序博客网 时间:2024/06/18 05:41
1.MainActivity
package com.bwie.rxjavaonedemo;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import java.util.ArrayList;import java.util.List;import java.util.concurrent.TimeUnit;import rx.Emitter;import rx.Observable;import rx.Observer;import rx.Subscriber;import rx.Subscription;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action0;import rx.functions.Action1;import rx.functions.Func1;import rx.schedulers.Schedulers;/** * // 1.RxJava观察者模式 * // 2.链式调用 * // 3.非常灵活的线程调度,异步任务框架 * // 4.灵活的操作符 */public class MainActivity extends AppCompatActivity implements View.OnClickListener {    private static final String TAG = "MainActivity";    // 被观察者创建的3种方式    private Button btnJust;    private Button btnFrom;    private Button btnCreate;    // 观察者创建的方式    private Button btnObserver;    private Button btnSubscribe;    private Button btnAction0;    private Button btnAction1;    private Button btnAction2;    // 线程调度    private Button btnSubscribeOn;    private Button btnObserveOn;    private Button btnReal;    // 操作符    private Button btnMap;    private Button btnFlatMap;    private Subscription subscribe;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 被观察者        btnJust = (Button) findViewById(R.id.btn_rx_just);        btnFrom = (Button) findViewById(R.id.btn_rx_from);        btnCreate = (Button) findViewById(R.id.btn_rx_create);        btnJust.setOnClickListener(this);        btnFrom.setOnClickListener(this);        btnCreate.setOnClickListener(this);        // 观察者        btnObserver = (Button) findViewById(R.id.btn_rx_observer);        btnSubscribe = (Button) findViewById(R.id.btn_rx_subscriber);        btnAction0 = (Button) findViewById(R.id.btn_rx_action0);        btnAction1 = (Button) findViewById(R.id.btn_rx_action1);        btnAction2 = (Button) findViewById(R.id.btn_rx_action2);        btnObserver.setOnClickListener(this);        btnSubscribe.setOnClickListener(this);        btnAction0.setOnClickListener(this);        btnAction1.setOnClickListener(this);        btnAction2.setOnClickListener(this);        // 线程调度        btnSubscribeOn = (Button) findViewById(R.id.btn_rx_subscribe_on);        btnObserveOn = (Button) findViewById(R.id.btn_rx_observe_on);        btnReal = (Button) findViewById(R.id.btn_rx_real);        btnSubscribeOn.setOnClickListener(this);        btnObserveOn.setOnClickListener(this);        btnReal.setOnClickListener(this);        // 操作符        btnMap = (Button) findViewById(R.id.btn_rx_map);        btnFlatMap = (Button) findViewById(R.id.btn_rx_flat_map);        btnMap.setOnClickListener(this);        btnFlatMap.setOnClickListener(this);        Log.i(TAG, "onCreate: " + Thread.currentThread().getName() + " id:"                + Thread.currentThread().getId());    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.btn_rx_just:                // 被观察者创建方式1                Observable observable1 = Observable.just(1, 2, 3, 4);                break;            case R.id.btn_rx_from:                // 被观察者创建方式2                String[] strs = {"hello", "world", "android"};                Observable observable2 = Observable.from(strs);                break;            case R.id.btn_rx_create:                // 被观察者第3种创建方式                Observable<String> observable3 = Observable.create(new Observable.OnSubscribe<String>() {                    @Override                    public void call(Subscriber<? super String> subscriber) {                        subscriber.onNext("Hello");                        subscriber.onNext("world");                        subscriber.onNext("android");                        subscriber.onNext("java");                        subscriber.onCompleted();                    }                });////                observable3.subscribeOn(AndroidSchedulers.mainThread())//                        .observeOn(Schedulers.io())//                        .subscribe(new Observer() {//                            @Override//                            public void onCompleted() {////                            }////                            @Override//                            public void onError(Throwable e) {////                            }////                            @Override//                            public void onNext(Object o) {//                                Log.i(TAG, "onNext: " + o);//                            }//                        });                break;            case R.id.btn_rx_observer:                Observable<Integer> observable4 = Observable.just(1, 2, 3, 4);                // 第一种观察者创建方式                Observer observer1 = new Observer<Integer>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(Integer integer) {                        Log.i(TAG, "onNext: " + integer);                    }                };                // 语法上是被观察者订阅观察者,实际上是观察者订阅被观察者,为了方便语法上的链式调用                observable4.subscribe(observer1);                break;            case R.id.btn_rx_subscriber:                Observable<Integer> observable5 = Observable.just(1, 2, 3, 4);                // 第二种观察者创建方式                Subscriber<Integer> subscriber = new Subscriber<Integer>() {                    @Override                    public void onStart() {                        super.onStart();                    }                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(Integer integer) {                        Log.i(TAG, "onNext: " + integer);                    }                };                observable5.subscribe(subscriber);                break;            case R.id.btn_rx_action0:                Observable<Integer> observable6 = Observable.just(1, 2, 3, 4);                // 观察者第三种创建方式                Action1<Integer> action1 = new Action1<Integer>() {                    @Override                    public void call(Integer integer) {                        Log.i(TAG, "call: " + integer);                    }                };                observable6.subscribe(action1);                break;            // 闭包            case R.id.btn_rx_action1:                Observable<Integer> observable7 = Observable.create(new Observable.OnSubscribe<Integer>() {                    @Override                    public void call(Subscriber<? super Integer> subscriber) {                        subscriber.onNext(1);                        subscriber.onNext(2);                        subscriber.onNext(3);                        subscriber.onNext(4);                        subscriber.onError(new Throwable("这是一条错误信息"));                    }                });                Action1<Integer> action11 = new Action1<Integer>() {                    @Override                    public void call(Integer integer) {                        Log.i(TAG, "call: " + integer);                    }                };                Action1<Throwable> action12 = new Action1<Throwable>() {                    @Override                    public void call(Throwable throwable) {                        Log.e(TAG, "call: " + throwable.getMessage());                    }                };                observable7.subscribe(action11, action12);                break;            case R.id.btn_rx_action2:                Observable<Integer> observable8 = Observable.create(new Observable.OnSubscribe<Integer>() {                    @Override                    public void call(Subscriber<? super Integer> subscriber) {                        subscriber.onNext(1);                        subscriber.onNext(2);                        subscriber.onNext(3);                        subscriber.onNext(4);                        // onCompleted和onError只能执行一个                        subscriber.onCompleted();//                        subscriber.onError(new Throwable("这是一条错误信息"));                    }                });                Action1<Integer> action21 = new Action1<Integer>() {                    @Override                    public void call(Integer integer) {                        Log.i(TAG, "call: " + integer);                    }                };                Action1<Throwable> action22 = new Action1<Throwable>() {                    @Override                    public void call(Throwable throwable) {                        Log.e(TAG, "call: " + throwable.getMessage());                    }                };                Action0 action20 = new Action0() {                    @Override                    public void call() {                        Log.i(TAG, "call: onComplete");                    }                };                observable8.subscribe(action21, action22, action20);                break;            case R.id.btn_rx_subscribe_on:                Log.i(TAG, "click thread name: " + Thread.currentThread().getName());                Observable.create(new Observable.OnSubscribe<Integer>() {                    @Override                    public void call(Subscriber<? super Integer> subscriber) {                        Log.i(TAG, "create call: " + Thread.currentThread().getName());                        Log.i(TAG, "create call: " + Thread.currentThread().getId());                        subscriber.onNext(1);                        subscriber.onNext(2);                        subscriber.onNext(3);                        subscriber.onNext(4);                        subscriber.onCompleted();                    }                })                        .subscribeOn(Schedulers.io())                        .map(new Func1<Integer, String>() {                            @Override                            public String call(Integer integer) {                                Log.i(TAG, "map call: " + Thread.currentThread().getName());                                Log.i(TAG, "map call: " + Thread.currentThread().getId());                                return String.valueOf(integer);                            }                        })                        .subscribeOn(Schedulers.newThread())//                        .subscribeOn(Schedulers.io())//                        .subscribeOn(AndroidSchedulers.mainThread())                        .subscribe(new Action1<String>() {                            @Override                            public void call(String integer) {                                Log.i(TAG, "subscribe thread name: " + Thread.currentThread().getName());                                Log.i(TAG, "subscribe thread id: " + Thread.currentThread().getId());                                Log.i(TAG, "call: " + integer);                            }                        });                break;            case R.id.btn_rx_observe_on:                Log.i(TAG, "click thread name: " + Thread.currentThread().getName());                Observable                        .create(new Observable.OnSubscribe<Integer>() {                            @Override                            public void call(Subscriber<? super Integer> subscriber) {                                Log.i(TAG, "create call: " + Thread.currentThread().getName());                                Log.i(TAG, "create call: " + Thread.currentThread().getId());                                subscriber.onNext(1);                                subscriber.onNext(2);                                subscriber.onNext(3);                                subscriber.onNext(4);                                subscriber.onCompleted();                            }                        })//                        .subscribeOn(Schedulers.io())//                        .observeOn(Schedulers.newThread())                        // 执行subscribeOn所有之前的操作所在的线程,只生效一次                        .subscribeOn(Schedulers.newThread())                        // observeOn每做一次就执行一次线程切换,下一个操作符的线程                        .observeOn(Schedulers.io())                        .map(new Func1<Integer, String>() {                            @Override                            public String call(Integer integer) {                                Log.i(TAG, "map call: " + Thread.currentThread().getName());                                Log.i(TAG, "map call: " + Thread.currentThread().getId());                                return String.valueOf(integer);                            }                        })                        .observeOn(AndroidSchedulers.mainThread())//                        .subscribeOn(Schedulers.io())//                        .subscribeOn(AndroidSchedulers.mainThread())                        .subscribe(new Action1<String>() {                            @Override                            public void call(String integer) {                                Log.i(TAG, "subscribe thread name: " + Thread.currentThread().getName());                                Log.i(TAG, "subscribe thread id: " + Thread.currentThread().getId());                                Log.i(TAG, "call: " + integer);                            }                        });                break;            case R.id.btn_rx_real:                subscribe = Observable.create(new Observable.OnSubscribe<Integer>() {                    @Override                    public void call(Subscriber<? super Integer> subscriber) {                        subscriber.onNext(2);                        subscriber.onNext(4);                        subscriber.onNext(5);                        subscriber.onNext(6);                        subscriber.onCompleted();                    }                })                        .delay(3, TimeUnit.SECONDS)                        .subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Action1<Integer>() {                            @Override                            public void call(Integer integer) {                                Log.i(TAG, "call: " + integer);                            }                        });                break;            case R.id.btn_rx_map:                Observable.just(1, 2, 3, 4)                        // 变换操作                        .map(new Func1<Integer, Student>() {                            @Override                            public Student call(Integer integer) {                                Student stu = new Student();                                stu.setId(integer);                                stu.setOrderName("序号为" + integer);                                return stu;//                                return "这是第" + integer + "个数据";                            }                        })                        .subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Action1<Student>() {                            @Override                            public void call(Student stu) {                                Log.i(TAG, "call: id is" + stu.getId());                                Log.i(TAG, "call: ordername is" + stu.getOrderName());                            }                        });                break;            case R.id.btn_rx_flat_map://                List<>                List<Student> stus = initData();                Observable.from(stus)                        // 平铺                        .flatMap(new Func1<Student, Observable<Score>>() {                            @Override                            public Observable<Score> call(Student student) {                                List<Score> scores = student.getScores();                                return Observable.from(scores);                            }                        })                        .subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Action1<Score>() {                            @Override                            public void call(Score score) {                                Log.i(TAG, "call: " + score.getThoeryScore());                            }                        });                break;        }    }    private List<Student> initData() {        List<Student> stus = new ArrayList<>();        List<Score> scores1 = new ArrayList<>();        Score score1 = new Score(10, 20);        Score score2 = new Score(20, 30);        Score score3 = new Score(30, 40);        scores1.add(score1);        scores1.add(score2);        scores1.add(score3);        stus.add(new Student(1, "a1", scores1));        List<Score> scores2 = new ArrayList<>();        Score score21 = new Score(30, 10);        Score score22 = new Score(40, 30);        Score score23 = new Score(30, 40);        scores2.add(score21);        scores2.add(score22);        scores2.add(score23);        stus.add(new Student(2, "a2", scores2));        List<Score> scores3 = new ArrayList<>();        Score score31 = new Score(40, 20);        Score score32 = new Score(0, 30);        Score score33 = new Score(30, 90);        scores3.add(score31);        scores3.add(score32);        scores3.add(score33);        stus.add(new Student(3, "a3", scores3));        return stus;    }    @Override
package com.bwie.rxjavaonedemo;import java.util.List;/** * Created by WuXirui * Create Time: 2017/12/4 * Description: */public class Student {    private int id;    private String orderName;    private List<Score> scores;    public Student() {    }    public Student(int id, String orderName, List<Score> scores) {        this.id = id;        this.orderName = orderName;        this.scores = scores;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getOrderName() {        return orderName;    }    public void setOrderName(String orderName) {        this.orderName = orderName;    }    public List<Score> getScores() {        return scores;    }    public void setScores(List<Score> scores) {        this.scores = scores;    }}

protected void onDestroy() { super.onDestroy(); // 当Activity销毁的时候取消订阅时间,防止内存泄漏 if (subscribe != null) { if (subscribe.isUnsubscribed()) { subscribe.unsubscribe(); } } }}

2.Student


package com.bwie.rxjavaonedemo;import java.util.List;/** * Created by WuXirui * Create Time: 2017/12/4 * Description: */public class Student {    private int id;    private String orderName;    private List<Score> scores;    public Student() {    }    public Student(int id, String orderName, List<Score> scores) {        this.id = id;        this.orderName = orderName;        this.scores = scores;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getOrderName() {        return orderName;    }    public void setOrderName(String orderName) {
package com.bwie.rxjavaonedemo;import java.util.List;import retrofit2.Call;import retrofit2.http.GET;import rx.Observable;/** * Created by WuXirui * Create Time: 2017/12/5 * Description: */public interface ApiService {    @GET("product/getCatagory")    Observable<MessageBean<List<Category>>> getCatagory();}

this.orderName = orderName; } public List<Score> getScores() { return scores; } public void setScores(List<Score> scores) { this.scores = scores; }}

3.ApiService

package com.bwie.rxjavaonedemo;import java.util.List;import retrofit2.Call;import retrofit2.http.GET;import rx.Observable;/** * Created by WuXirui * Create Time: 2017/12/5 * Description: */public interface ApiService {    @GET("product/getCatagory")    Observable<MessageBean<List<Category>>> getCatagory();}
4.Score

package com.bwie.rxjavaonedemo;/** * Created by WuXirui * Create Time: 2017/12/4 * Description: */public class Score {    private int thoeryScore;    private int scaleScore;    public Score() {    }    public Score(int thoeryScore, int scaleScore) {        this.thoeryScore = thoeryScore;        this.scaleScore = scaleScore;    }    public int getThoeryScore() {        return thoeryScore;    }    public void setThoeryScore(int thoeryScore) {        this.thoeryScore = thoeryScore;    }    public int getScaleScore() {        return scaleScore;    }    public void setScaleScore(int scaleScore) {        this.scaleScore = scaleScore;    }}




































原创粉丝点击