阅读背景:

RxAndroid 操作符使用

来源:互联网 
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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: