RxAndroid 操作符使用<一>
2016-09-16 18:46
465 查看
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.trello.rxlifecycle.ActivityEvent; import com.trello.rxlifecycle.components.support.RxAppCompatActivity; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import butterknife.ButterKnife; import butterknife.OnClick; import rx.Observable; import rx.Scheduler; import rx.Subscriber; import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * 资源 https://gank.io/post/560e15be2dca930e00da1083#toc_17 http://www.cnblogs.com/zhaoyanjun/p/5175502.html */ public class MainActivity extends RxAppCompatActivity { private Subscription pollSubscription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); Log.i("rxjava主线程称", Thread.currentThread().getName()); } //延时 @OnClick(R.id.delay_button) public void delayClick(){ rx.Observable<String> observable = rx.Observable.just("1", "2", "3", "4"); observable.delay(3, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("rxjava call线程名称:" + Thread.currentThread().getName() + " 数据 " + s); } }); } //轮询 @OnClick(R.id.polling_btn) public void pollingClick(){ Observable observable = Observable.interval(3000, 3000, TimeUnit.MILLISECONDS);//单位最好设置为毫秒 pollSubscription = observable.subscribe(new Action1() { @Override public void call(Object o) { System.out.println("rxjava 轮询数据: "+ o); pollSubscription.unsubscribe(); } }); } //doNext() @OnClick(R.id.donext_btn) public void doNextClick(){ Observable observable = Observable.just("1", "2", "3", "4"); observable //.subscribeOn(Schedulers.io()) //指定事件发生的线程 .doOnNext(new Action1() { @Override public void call(Object o) { System.out.println("doOnNext 线程名称:" + Thread.currentThread().getName()); System.out.println("doOnNext 缓存:" + o); } }) .observeOn(AndroidSchedulers.mainThread())//指定回调的线程 .subscribe(new Action1() { @Override public void call(Object o) { System.out.println("Action1 线程名称:" + Thread.currentThread().getName()); System.out.println("Action1 数据显示:" + o); } }); } //事件与当前组件绑定(1compose(this.<Long>bindToLifecycle()) 2、继承Activity) @OnClick(R.id.compose_btn) public void composeWithIntentClick(){ Observable.interval(0, 1, TimeUnit.SECONDS) .subscribeOn(Schedulers.io()) .compose(this.<Long>bindToLifecycle()) //这个订阅关系跟Activity绑定,Observable 和activity生命周期同步 .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { System.out.println("rxjava =lifecycle--" + aLong); } }); } @OnClick(R.id.map_btn) public void mapClick(){ Observable observable = Observable.just("北京","上海","深圳"); observable .subscribeOn(Schedulers.io())//指定事件的发生线程 .map(new Func1<String, String>() { @Override public String call(String o) { System.out.println("call 线程名称:" + Thread.currentThread().getName()); return o; } }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<String>() { @Override public void call(String o) { System.out.println("Action1 Value:" + o); System.out.println("Action1 线程名称:" + Thread.currentThread().getName()); } }); } @OnClick(R.id.flatmap_btn) public void flatMap(){ Student student1 = new Student("小明"); Student.Course _1course1 = student1.new Course("数学"); Student.Course _1course2 = student1.new Course("语文"); student1.add(_1course1); student1.add(_1course2); Student student2 = new Student("陈红"); Student.Course _2course1 = student2.new Course("历史"); Student.Course _2course2 = student2.new Course("地理"); student2.add(_2course1); student2.add(_2course2); List<Student> mList = new ArrayList<>(); mList.add(student1); mList.add(student2); Observable.from(mList).flatMap(new Func1<Student, Observable<Student.Course>>() { @Override public Observable<Student.Course> call(Student student) { System.out.println("-------学生-------"); return Observable.from(student.getCourseList()); } }).subscribe(new Action1<Student.Course>() { @Override public void call(Student.Course course) { System.out.println("课程名字:"+course.courseName); } }); } public class Student { public Student(String name) { this.name = name; } public String name; public List<Course> courseList = new ArrayList<>(); public class Course{ public String courseName; public Course(String courseName) { this.courseName = courseName; } } public List<Course> getCourseList() { return courseList; } public void add(Course course){ courseList.add(course); } } @Override protected void onDestroy() { super.onDestroy(); if (pollSubscription != null){ pollSubscription.unsubscribe(); } } }
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'io.reactivex:rxandroid:1.2.1' compile 'io.reactivex:rxjava:1.1.10' compile 'com.jakewharton:butterknife:6.0.0' compile 'com.jiechic.library:rxlifecycle-components:0.6.0' }
相关文章推荐
- 【Android开发学习45】使用google语音识别引擎(Google Speech API)<一>
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>
- <Android 应用 之路> 百度地图API使用(2)
- RxAndroid之初体验——Create、From、interval、just、range操作符的基本使用
- <Android 应用 之路> 百度地图API使用(2)
- android中配置文件property的用途以及使用<转>
- Android: Git/Gerrit/Repo 的使用 <一>
- <Android 应用 之路> 百度地图API使用(3)
- Android中针对<meta-data>怎么来使用
- <Opencv for Android 调试>加载XML模型,使用SVM.predict出现的NullPointerException问题
- Android UI设计之<一>使用ImageView实现ProgressBar旋转效果
- <Android学习笔记6>——Android应用开发SharedPreferences存储数据的使用方法
- Android gradle使用教程<一> 基本使用方法
- <Android 应用 之路> 百度地图API使用(3)
- android ContentProvider结合SQLiteHelper实现数据的共享<一>
- <交流贴>android语音识别之科大讯飞语音API的使用
- ionic版本从v1.0.0升级到v1.2.4后,android上使用<ion-content>的页面无法滑动
- maven学习使用<一> --- 下载安装设置MyEclipse关联
- RxJava 和 RxAndroid 二(操作符的使用)
- <Android 应用 之路> 百度地图API使用(4)