У меня есть метод обратного вызова событияКак разместить событие в ReactiveX Observable?
public void onSomethingHappened(Information info) {
, которая называется некоторыми обычным эмитентом событий.
Теперь я хочу обернуть это в наблюдаемый ReactiveX.
Как это сделать?
UPDATE
Я нашел PublishSubject<T>
класс и использовал это следующим образом обернуть LocationListener
из Android API:
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
, StatusPublisher
и EnablenessPublisher
Я?
Вы можете подписаться на любой объект, который реализует Observable ... Итак, вы можете подписаться на весь объект PublishSubjects внутри LocationPublisher. Если это хороший подход? Трудно сказать ... это выглядит хорошо для меня. –
Проблема в том, что кто-то может подталкивать ценности к открытым предметам, и RxJava, по-видимому, не имеет понятия о предметах r/o. – Dims
Что такое r/o subject? –