2017-09-22 4 views
2

아래 코드와 같이 .just() 연산자로 Observable을 코딩했습니다..just() 연산자를 사용할 때 지연을 추가하는 방법

mAsyncObservable = rx.Observable.create(new rx.Observable.OnSubscribe<Integer>() { 
     @Override 
     public void call(Subscriber<? super Integr> subscriber) { 
      SystemClock.sleep(3000); 

      subscriber.onNext(10); 
      subscriber.onCompleted(); 
     } 
    }); 

방법 : 은 내가 무엇을 할 trxing하고하는 것은 그래서 정수 값은 관찰자로 배출되기 전에이 feew 초

지연 될 것을

뭔가 같은 운영자에게 지연을 추가 할 수있다 .just() 연산자를 사용하여 동일한 코드를 변환 하시겠습니까? 수행 할 경우 다음 코드를 호출 할 필요가 있으므로, 다른 스레드로의 delay() 이동 관찰 가능한 실행이

Observable.just("Some").delay(1, TimeUnit.SECOND); 

을하지만 기억 :

코드 :

Subscriber<Integer> integerSubscriber = new Subscriber<Integer>() { 
    private final String SubscriberTag = "integerSubscriber"; 
    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.w(TAG, "onStart->" + SubscriberTag); 
    } 

    @Override 
    public void onCompleted() { 
     Log.w(TAG, "onCompleted->" + SubscriberTag); 
    } 

    @Override 
    public void onError(Throwable e) { 
     Log.w(TAG, "onError->" + SubscriberTag + e.getMessage().toString()); 
    } 

    @Override 
    public void onNext(Integer i) { 
     Log.w(TAG, "onNext->" + SubscriberTag + "after processing " + i); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    rx.Observable<Integer> integerObservable = rx.Observable.just(10); 
    integerObservable.subscribe(integerSubscriber); 
} 
+0

그 정확한 목적을 위해'delay' 연산자가있다. – akarnokd

+0

'delay' 연산자의 문제점은 무엇입니까? http://reactivex.io/documentation/operators/delay.html –

+0

@akarnokd 예제를 제공해 주시겠습니까? 내가 새로운 ro randandroid이기 때문에이 질문을 게시했습니다. 배워야합니다. 감사합니다. – user2121

답변

2

당신은 그것을 사용할 수 있습니다 지연 후 일부 UI가 변경됩니다.

Observable.just("Some").delay(1, TimeUnit.SECOND).observeOn(AndroidSchedulers.mainThread()); 
@PPartisan 말했듯이 5,

편집

, 당신은 또한 delay에 세 번째 매개 변수로 전달하여 스케줄러를 지정할 수 있습니다

Observable.just("Some").delay(1, TimeUnit.SECOND, AndroidSchedulers.mainThread()); 
+0

'delay()'또한'Scheduler'를 지정할 수있는 세 번째 인수를 취합니다. 따라서 Observable.just ("some"). delay (1, TimeUnit.SECOND, AndroidSchedulers.mainThread); ' – PPartisan

+1

@Partisan 내가 알지 못했지만, 내 대답을 바로 잡겠다. – Valentun

+0

다음과 같이 답변 해 주셨습니다. rx.Observable integerObservable = rx.Observable.just (2,3,4,5,8,66) . 지연 (3, TimeUnit.SECONDS); integerObservable.observeOn (AndroidSchedulers.mainThread()); integerObservable.subscribe (integerSubscriber); 하지만 코드를 실행할 때 다음과 같은 오류가 발생합니다. onError-> integerSubscriberOnly 뷰 계층 구조를 만든 원래 스레드가 뷰를 터치 할 수 있습니다. – user2121