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
https://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();
}
}
}import android.support.v7.app.AppCompatActivity