2017-01-23 1 views
2

I는 어떤 종래의 이벤트 발행에 의해 호출되는 이벤트 콜백 방법이벤트를 ReactiveX Observable에 넣는 방법?

public void onSomethingHappened(Information info) { 

있다.

이제 이것을 ReactiveX로 랩핑하고자합니다.

어떻게 하시겠습니까?

내가 PublishSubject<T> 클래스를 발견하고 안드로이드 API에서 LocationListener을 포장하기 위해 다음과 같은 방법이 사용

UPDATE :

public class LocationPublisher implements LocationListener { 


    @Override 
    public void onLocationChanged(Location location) { 
     LocationPublisher.onNext(location); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     StatusPublisher.onNext(new BundleEx(provider, status, extras)); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     EnablenessPublisher.onNext(new Enableness(provider, true)); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     EnablenessPublisher.onNext(new Enableness(provider, false)); 
    } 

    public final PublishSubject<Location> LocationPublisher = PublishSubject.create(); 

    public final PublishSubject<BundleEx> StatusPublisher = PublishSubject.create(); 

    public final PublishSubject<Enableness> EnablenessPublisher = PublishSubject.create(); 


    public static class Enableness { 

     private final String provider; 

     private final boolean enabled; 


     public Enableness(String provider, boolean enabled) { 
      this.provider = provider; 
      this.enabled = enabled; 
     } 

     public String getProvider() { 
      return provider; 
     } 

     public boolean isEnabled() { 
      return enabled; 
     } 
    } 


    public static class BundleEx { 

     private final String provider; 

     private final int status; 

     private final Bundle extras; 

     public BundleEx(String provider, int status, Bundle extras) { 
      this.provider = provider; 
      this.status = status; 
      this.extras = extras; 
     } 

     public String getProvider() { 
      return provider; 
     } 

     public int getStatus() { 
      return status; 
     } 

     public Bundle getExtras() { 
      return extras; 
     } 
    } 
} 

이 올바른 방법인가? 이제 LocationPublisher, StatusPublisherEnablenessPublisher에 가입 할 수 있습니까?

+0

기본적으로 Observable을 구현하는 모든 객체를 구독 할 수 있습니다. 그렇기 때문에 LocationPublisher 내의 모든 PublishSubjects 객체에 가입 할 수 있습니다. 좋은 접근이라면? 그것은 말하기 어렵습니다 ... 그것은 나를 위해 좋아 보인다. –

+0

문제는 누구나 노출 된 주체에 값을 전달할 수 있으며 RxJava에는 r/o 주체가 없다는 것입니다. – Dims

+0

r/o 제목은 무엇입니까 ?? –

답변

0

이러한 이벤트의 출처를 개념적으로 관찰 할 수있는 것으로 생각하면 청취자는 개념적 가입자입니다.

가장 큰 불일치는 무한한 이벤트 소스를 보유하고 있다는 것입니다. 즉, 이벤트 자체가 종료되지 않습니다. 처리가 불법이거나 불가능한 것은 아니지만 RX에는 자연스럽지 않습니다.

그래서 Observable.create()를 사용합니다. OnSubscribe는 가입자의 onNext()를 호출하는 리스너를 구현하는 동안 리스너를 기존 소스에 추가하는 액션입니다. // 최종 EventSource 소스

= ... 내가 메모리로 이동

Observable.create(s -> { 
    source.addFooBarListener(info -> { //could be a full anon innerclass too if more than 1 method 
    s.onNext(info); 
    }); 
}); 

, 나는 손에 컴파일러 나 API를 필요가 없습니다. 죄송합니다. 올바른 onComplete()/onError()를 수행하기위한 누락 된 코드 줄이 있습니다.

관련 문제