목차
비슷한 기능으로 타이머() 기능이 있습니다.
7.Range
8.Repeat
Java java지도 시간 RxJava_03 [관찰자 생성 작업]을 간단하게 자세히 소개합니다.

RxJava_03 [관찰자 생성 작업]을 간단하게 자세히 소개합니다.

Mar 04, 2017 am 09:44 AM

이 튜토리얼은 RxJava1을 기반으로 합니다. >다음 함수는 모두 Observable을 생성하는 데 사용되는 함수입니다. 필요에 따라 해당 기능을 만들 수 있습니다.
Create - 원래 Observable 생성 기능

    Defer - 구독 생성 후 생성된 Observable
  1. Empty/Never/Throw - 데이터를 보내지 않거나 예외 데이터를 보내는 Observable 생성
  2. Just - 1-9 값을 보내는 Observable 생성
  3. From - 큐를 방출하는 Observable 생성
  4. Interval&Timer - 타이머와 같은 Observable 생성
  5. Range - 생성 Observable
  6. 특정 정수 유형을 전송하는 반복
  7. Create 연산자를 사용하여 처음부터 Observable을 생성하고, 이 연산자에 관찰자를 매개변수로 허용하는 함수를 전달합니다. 그리고 Observable처럼 동작하도록 이 함수를 작성합니다. 관찰자의 onNext, onError 및 onCompleted 메서드를 적절하게 호출합니다.

    잘 구성된 유한 Observable은 관찰자의 onCompleted를 정확히 한 번 호출하거나 onError를 정확히 한 번 호출해야 하며 이후에는 관찰자의 다른 메서드를 호출할 수 없습니다.
  8. create 메소드에 전달된 함수에서 관찰자의 isUnsubscribed 상태를 확인하여 관찰자가 없을 때 Observable이 데이터 방출이나 비용이 많이 드는 작업을 중지할 수 있도록 하는 것이 좋습니다.

    샘플 코드:
  9. 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.
로그인 후 복사

2. Defer

Observable은 관찰자가 구독할 때까지 생성되지 않으며 각 관찰자에 대해 새로운 관찰 가능.

Defer 연산자는 관찰자가 구독할 때까지 기다린 다음 Observable 팩토리 메소드를 사용하여 Observable을 생성합니다. 이는 모든 Observer에 대해 이 작업을 수행하므로 각 구독자는 동일한 Observable을 구독하고 있다고 생각하지만 실제로 각 구독자는 자신만의 별도의 데이터 시퀀스를 얻습니다.

코드는 다음과 같습니다:

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) {
    }
});
로그인 후 복사

3.Empty/Never/Throw

Empty

데이터를 방출하지 않지만 종료되는 Observable을 생성합니다. 일반적으로

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 .OnSubscribe 인터페이스를 구현해야 합니다. 대신 just 함수를 사용할 수 있습니다. 샘플 코드는 다음과 같습니다:

Observable
    .just("hello Android")
    .subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            Log.i(TAG, "call: "+s);
        }
    });
로그인 후 복사

출력:

onNext: hello Android
Sequence complete.
로그인 후 복사

단일 데이터를 해당 데이터를 내보내는 Observable로 변환하면 됩니다.

유사한 기능은 다음과 같습니다:

just(T t1);

just(T t1,T t2); 🎜>

그냥(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 함수로 구현합니다.

  • 5.From
  • 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=&#39;" + name + &#39;\&#39;&#39; +
                    ", age=" + age +
                    &#39;}&#39;;
        }
    }
    로그인 후 복사

각 동급생의 정보를 저장하기 위해 컬렉션이 생성됩니다.

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;
}
로그인 후 복사
  1. RxJava는 이를 다음과 같이 변환합니다:

    ArrayList persons = initPersons();
    for (int i = 0; i < persons.size(); i++) {
        //打印每个同学
        Log.i(TAG,persons.get(i).toString());
    }
    로그인 후 복사
  2. 6.Interval&Timer
  3. 고정된 간격으로 정수 시퀀스를 내보내는 Observable을 만듭니다.

  4. RxJava는 이 연산자를 간격 방법으로 구현합니다. 시간 간격을 나타내는 매개변수와 시간 단위를 나타내는 매개변수를 허용합니다.
  5. //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);
        }
    });
    로그인 후 복사
  6. 위 코드는 특정 시간 간격에 따라 하위 스레드의 데이터를 지속적으로 인쇄합니다. 이 작업은 타이머 작업과 유사하며 타이머 타이머를 교체하는 것으로 생각할 수도 있습니다.

비슷한 기능으로 타이머() 기능이 있습니다.

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
...
로그인 후 복사

7.Range

특정 정수 시퀀스를 방출하는 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 ArrayList students = 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));
            }
        });
로그인 후 복사

8.Repeat

创建一个发射特定数据重复多次的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)!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)