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; } @Overridepackage 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.ApiServicepackage 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.Scorepackage 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 0
- RxJava + OkHttp
- Retrofit+RxJava+OKhttp+RxBus
- retrofit+okhttp+rxjava
- Rxjava 、Retrofit、Okhttp整合
- Rxjava+ReTrofit+okHttp深入浅出
- rxjava,okhttp 合并请求
- RxJava+Retrofit+OkHttp实战
- Retrofit+Okhttp+RxJava
- retrofit+okhttp+rxjava
- Android OkHttp Retrofit RxJava
- OKHttp + RxJava请求数据
- Okhttp网络请求+Rxjava
- RxJava+Retrofit+OkHttp+mvp
- 封装RxJava+Retrofit+OkHttp
- mvp+rxjava+retrofit+okhttp
- Retrofit + Rxjava + Okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- 运筹学(3)- 坐标轮换法
- maven项目创建
- Linux开发环境搭建与使用——Linux必备软件之SSH
- Java注解(Annotation)详解(二)——自定义注解
- 【Codevs1174】 靶形数独 启发式搜索 (10/1000)
- RxJava + OkHttp
- n个小朋友围成一个圈,从0开始编号,数到m-1的小朋友出列,下一个小朋友开始继续数数,直到最后一个小朋友出列
- 测试分类器的正确率
- Linux开发环境搭建与使用——Linux 常用命令的使用
- Java注解(Annotation)详解(三)——解析注解
- [poj]P1655树的重心
- Centos7远程桌面 vnc-server设置
- Java注解(Annotation)详解(四)——注解反射生成SQL语句
- Retrofit + RxJava + OkHttp 让网络请求变的简单