您的位置:首页 > 移动开发 > Android开发

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'
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: