RxJava + OkHttp

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;
    }
}




































  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值