2016-09-19 3 views
0

나는 사용자 정의 클래스를 가지고 있는데, Builder이라고 부른다. 비동기 작업을 수행하는 act() 메서드가 있습니다. 작업이 완료되면 이벤트를 내 보내려합니다.RxJava : 사용자 정의 클래스보기

RxJava에서 어떻게 수행 할 수 있습니까?

직선적 인 작업처럼 보이지만 아직 제대로 된 RxJava 방법을 찾지 못했습니다. 자세한 내용에 대한

는 전형적인 act() 방법과 같이 보입니다 :

class Builder 
     public void act() { 
      processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
       @Override 
       public void onComplete(int result) { 
        // Emit event 
       } 
      }); 
     } 

그리고 내가 원하는 소비 클래스에 전화하기 : 어떻게 든

builder.act() 

그리고이 때 onComplete()을을 경고 호출됩니다.


나는 또한 ProcessRunner 제어, 그래서 RxJava와 체인 결과로 그것을 변환하고 싶습니다,하지만 지금 나는 단순한 유스 케이스 할게요!

답변

1

RxJava에 PublishSubject을 사용할 수 있습니다. 빌더에 사용하는 방법을 설명하겠습니다. 아래 그림과 같이 클래스를 만듭니다

public class Communicator { 
    private static Communicator mCommunicator = new Communicator(); 
    private PublishSubject<Void> mGrabEvent = new PublishSubjetct.create(); 
    private Communicator(){ 
    } 
    public static getCommunicator(){ 
    return mCommunicator 
    } 
    public static emitEventItem(){ 
    // you can pass any object that you want to listen 
    mGrabEvent.onNext(null); 
    } 
public PublishSubject<Void> subscribeEvent(){ 
    return mGrabEvent; 
} 
} 

이 클래스는 & 응용 프로그램으로 어디서나 특정 이벤트를 수신을 위해 가입 방출 도움이 될 것이다. 아래에 나는 당신에게 방출하거나 그 청취자를 당신의 활동이나 단편에 연결시키는 방법을 보여 주려고 노력한다. 빌더 클래스

class Builder{ 
    public void act() { 
    processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
     @Override 
     public void onComplete(int result) { 
     // Emit event 
     Communicatort.getCommunicator().emitEventItem(); 
     } 
    }); 
    } 
    } 

B. 당신이 그것을 가입하여 청취 할 또 다른 끝 지점에서 방출 메시지에 대한

A..

Communicatort.getCommunicator().subscribeEvent().subscribe(new Action<Void>(){ 
    @overrider 
    public void call(Void void){ 
    } 
}); 

C. 마지막으로, 활동의 Destroy에서 탈퇴해야합니다.

당신을 도울 수 있기를 바랍니다. 언제든지 이해할 수 있으면 알려주세요.

덕분에, Bhavdip

+1

PublishSubject 내가이 일을하고 결국,하지만 난 빌더 클래스 자체에 올려 놓는 방법이다. 추가 정보를 주셔서 감사합니다, 그것은 좋은 접근 방법처럼 보입니다! – mtyson

+0

피실험자는 아무도 구독하지 않아도 항목을 내보낼 수 있다는 의미의 "관찰 대상"입니다. 예를 들어, 귀하의 커뮤니케이터가 켜져 있지 않을 때 항목을 방출하기 시작할 수 있습니다. –

+0

그게 사실이지만 그것은 커뮤니 케 이터 클래스 내부에서 처리 할 수 ​​있습니다. 일부 구독 여부를 확인할 수 있습니다. –

1

act 메서드에서 Observable<Boolean>을 반환해야합니다. 그런 다음 을 Subscriber으로 보내면 자신의 수업을 듣게됩니다.

코드 : 클래스 소비

class Builder { 
    public Observable<Boolean> act() { 
     return Observable<Boolean>.create { 
     public void call(final Subscriber subscriber) { 
     processRunner.runAsync(new ProcessRunner.ProcessResultHandler(){ 
      @Override 
      public void onComplete(int result) { 
       subscriber.onNext(true); 
       subscriber.onCompleted(); 
      } 
     }); 
     } 
     } 
    } 
} 

:

 builder.act().subscribe({ 
     void onNext(boolean status) {} 
     void onCompleted() { // finished } 
     }) 

코드하지 않음 시험. 구문 오류가있을 수 있습니다.