이 튜토리얼은 RxJava1을 기반으로 합니다. >다음 함수는 모두 Observable을 생성하는 데 사용되는 함수입니다. 필요에 따라 해당 기능을 만들 수 있습니다.
Create - 원래 Observable 생성 기능
Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> observer) { try { if (!observer.isUnsubscribed()) { for (int i = 1; i < 5; i++) { observer.onNext(i); } observer.onCompleted(); } } catch (Exception e) { observer.onError(e); } } } ).subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
Next: 1 Next: 2 Next: 3 Next: 4 Sequence complete.
Observable<String> defer = Observable.defer(new Func0<Observable<String>>() { //当observable被创建的时候顺便调用observable内部的call()方法并在方法中发送消息 //每subscribe()就会在call()中返回一个新的实例对象 @Override public Observable<String> call() { Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello Android !"); } }); return observable; } }); defer.subscribe(new Action1<String>() { @Override public void call(String s) { } }); defer.subscribe(new Action1<String>() { @Override public void call(String s) { } });
Never데이터를 방출하지 않고 오류로 종료되는 Observable을 생성Throw데이터를 방출하지 않고 종료되는 Observable을 생성 오류가 발생했습니다 이 세 연산자에 의해 생성된 Observable의 동작은 매우 특별하고 제한적입니다. 이는 테스트에 유용하며 때로는 다른 Observable과 함께 사용되거나 Observable이 필요한 다른 연산자의 매개변수로 사용됩니다. RxJava는 이러한 연산자를 공백, 절대 및 오류로 구현합니다. 오류 연산자에는 Observable이 종료되는 Throwable 매개변수가 필요합니다. 이러한 연산자는 기본적으로 특정 스케줄러에서 실행되지 않지만 비어 있고 오류가 있는 경우 Scheduler 매개변수를 전달하면 이 스케줄러에 알림을 보냅니다. 4.그냥관찰자가 관찰자에게 데이터를 전송하려는 경우 코드는 다음과 같습니다.
Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("hello Android"); } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, "call: "+s); } });
Observable .just("hello Android") .subscribe(new Action1<String>() { @Override public void call(String s) { Log.i(TAG, "call: "+s); } });
onNext: hello Android Sequence complete.
그냥(T t1,T t2,T t3);
그냥(T t1,T t2,T t3,T t4) ;
그냥(T t1,T t2,T t3,T t4,T t5);
…
RxJava는 이 연산자를 1~9개의 매개변수를 허용하고 매개변수 목록 순서대로 이러한 데이터를 내보내는 Observable을 반환하는 just 함수로 구현합니다.
1~9개의 데이터를 보내는 just 함수에 비해 From 함수는 데이터 큐를 보내고 출력 길이에 제한이 없습니다.
학교에서 관심 수업을 열었는데, 학기 초에 몇몇 반 친구들이 수업에 왔습니다. 동급생 클래스의 정의는 다음과 같습니다.
public static class Student { public String name; public int age; public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
각 동급생의 정보를 저장하기 위해 컬렉션이 생성됩니다.
rree다음으로 선생님의 설명입니다. 모두 불러주세요. 여기서는 각 학생의 로그인 상태를 인쇄하여 설명합니다.
private ArrayList initPersons() { ArrayList<Student> persons = new ArrayList<>(); persons.add(new Student("张三", 16)); persons.add(new Student("李四", 17)); persons.add(new Student("王二麻子", 18)); return persons; }
RxJava는 이를 다음과 같이 변환합니다:
ArrayList persons = initPersons(); for (int i = 0; i < persons.size(); i++) { //打印每个同学 Log.i(TAG,persons.get(i).toString()); }
고정된 간격으로 정수 시퀀스를 내보내는 Observable을 만듭니다.
//1.定义被观察者,用来发送一个队列的事件 Observable<Student> observable = Observable.from(persons); //2.当开始订阅的时候 接收被观察者发送过来的一系列事件 observable.subscribe(new Action1<Student>() { @Override public void call(Student student) { Log.i(TAG, "call: "+student.toString()); } });
출력:
//3000毫米发送一个请求 该请求包含了一个自增长的整数型变量 Observable<Long> observable = Observable.interval(3000, TimeUnit.MILLISECONDS, Schedulers.io()); observable.subscribe(new Action1<Long>() { @Override public void call(Long i) { // such as printf RxIoScheduler-2call: 685 Log.i(TAG, Thread.currentThread().getName()+"call: "+i); } });
com.m520it.rxjava I/IT520: RxIoScheduler-2call: 0 com.m520it.rxjava I/IT520: RxIoScheduler-2call: 1 com.m520it.rxjava I/IT520: RxIoScheduler-2call: 2 com.m520it.rxjava I/IT520: RxIoScheduler-2call: 3 ...
특정 정수 시퀀스를 방출하는 Observable을 생성합니다.
범위 연산자는 범위 내에서 순서가 지정된 정수 시퀀스를 내보냅니다. 범위의 시작과 길이를 지정할 수 있습니다.
比如下面这个班级的所有学生都在一个集合里,现在要打印出来,可以是这样的:
private ArrayList initPersons() { ArrayList<Student> persons = new ArrayList<>(); persons.add(new Student("张三", 16)); persons.add(new Student("李四", 17)); persons.add(new Student("王二麻子", 18)); return persons; } final ArrayListstudents = initPersons(); //这里发射一个起始值0,长度students.size()的索引 用来遍历队列 Observable .range(0,students.size()) .subscribe(new Action1 () { @Override public void call(Integer index) { Log.i(TAG, "call: "+students.get(index)); } });
创建一个发射特定数据重复多次的Observable
Repeat重复地发射数据。某些实现允许你重复的发射某个数据序列,还有一些允许你限制重复的次数。
//设置重复发送3次 Observable<String> observable = Observable.just("Hello Android").repeat(3); Action1<String> action1 = new Action1<String>() { @Override public void call(String s) { Log.i(TAG, "call: " + s); } }; observable.subscribe(action1);
以上就是深入浅出RxJava_03[被观察者创建操作]的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!