class SingleTonHolder {
private static _instance = null; // and initalize it using a static method.
private List<MyListener> myListeners new ArrayList<>();
public SingleTonHolder getInstance(){ return _instance }
public void registerListener(MyListener listener) { myListeners.add(listener); }
public void removeListener(MyListener listener) { myListeners.remove(listener); }
public void doSomethingToTheListener(...) { for(MyListener l : myListeners) l.doSomethingToTheListener(..); }
}
ClassOne extends MyListener {
public void onCreate() {
SingleTonHolder.getInstance().registerListener(this);
}
public vond onDestroy() {
SingleTonHolder.getInstance().removeListener(this);
}
}
ClassTwo {
MyListener listener = null;
public void onCreate() {
listener = new MyListener( () => { .... });
SingleTonHolder.getInstance().registerListener(listener);
}
public vond onDestroy() {
SingleTonHolder.getInstance().removeListener(listener);
}
}
由于我想使用RxJava2和RxAndroid2来尝试相同的解决方案,因此我尝试了以下方法。
Class CallFactory{
public Obvservable<List<Data>> getDummyData() { return anDummyObservable; }
}
然后ive创建了一个Singleton类,它有一个函数来修改/observ onec客户机订阅。
public Observable<List<Data>> getData() {
return CallFactory.with(context)
.getDummyData(...)
.map(modifyList -> { /** do some processing **/return modifyList;
})
}
因为每次客户端订阅它时都会“召回”它,并且客户端一直保持连接,直到调用onCompleted()。
private PublishSubject<List<Data>> sharedSubject = PublishSubject.create();
public PublishSubject getSharedSubject() { return this.sharedSubject; }
public void setNewData(List<Data> data) {
sharedSubject.onNext(data);
}
我很肯定这不是应该的,但是rxjava是为提供这样的解决方案而设计的吗?如果我想共享不同的事件,那么onNext、onError、onComplete,我需要在onNext中包装一个接口吗?
代码没有经过测试,只是为了显示我是如何理解它的。任何帮助都将不胜感激。
是的,RxJava使用了这3个基本的抽象回调onnext
oncomplete()
和onerror()
。
但我相信您忽略的重要部分是,观察者和使用者是接口的一般抽象。这意味着您将只有3个回调,但每个数据类型将有3个回调。
RxJava的主要思想是创建数据流。这意味着您将拥有publishSubject
、
>
publishSubject
、
等,然后使用两个接口之一observer
或consumer
。没有必要创建另一个接口或将其包装在其他东西中。只需使用RxJava提供的信息,并将所需的所有信息放在数据中即可。
希望能有所帮助。
示例:
// first class
public static class Foo implements Consumer<Data> {
Disposable d;
public Foo() {
this.d = SingleTonClass.subject.subscribe(this);
}
@Override void accept(Data data) {
.. here the original data
}
}
// second class
public static class Bar implements Consumer<MappedData> {
Disposable d;
public Foo() {
this.d = SingleTonClass.subject
.map( some data transform )
.subscribe(this);
}
@Override void accept(MappedData data) {
.. here the data after the map
}
}
class SingleTonClass {
public static PublishSubject<Data> subject = PublishSubject.create();
// then feel free to fire events in the subject:
public static void onSomethingHappen(){
subject.onNext(new Data(1));
}
public static void onOtherThingHappen(){
subject.onNext(new Data(2));
}
}
总而言之,我不会把Rx调用包装成其他东西,而是直接在需要的地方使用它们。
问题内容: 我一直在寻找新的rx java 2,但我不确定我是否已经明白了这个主意… 我知道我们所拥有的并没有支持。 因此,基于例如,可以说我有有: 在大约128个值之后,这将崩溃,这很明显我消耗的速度比获取项目要慢。 但是,我们有相同的 即使我延迟使用它,它仍然完全不会崩溃。为了工作,可以说我放了一个运算符,崩溃已经消失了,但并不是所有值都被发出。 因此,我目前在脑海中找不到答案的基本问题是,为
问题内容: 据我了解,RxJava2 创建了另一个Observable,它仅包含原始Observable中的一个元素。这 绝不能 丢,因为它是由效果过滤掉一个例外,因为它是发生第二次。 如 以下 代码段所示 输出量 我的问题: 我理解它正确吗? 到底是什么导致了异常。 如何从消费者那里解决呢? 问题答案: 是的,但是因为可观察到的“结束”并不意味着内部运行的代码已停止。为了在这种情况下完全安全,您
我一直在看新的rx java 2,我不太确定我是否理解了< code >背压的概念... 我知道我们有没有支持的和有背压。 因此,基于示例,假设我有与: 这将在大约128个值之后崩溃,很明显,我的消费速度比获取物品要慢。 但是< code>Observable也是如此 这将不会崩溃,即使我把一些消费延迟,它仍然工作。为了使< code >可流动工作,假设我将< code>onBackpressur
我的java程序有多个类,每个类包含一个单独的JFrame。所有三个JFrames都是在我的main类中启动的,并且设置为setVisible(false)所以它们是隐藏的。当单击JPopUpMenu中的按钮时,相应的JFrame被设置为setVisible(true)。在我定义的这些类中: 当我通过右键单击NetBeans中的.java文件并选择run file来分别运行每个类时,外观和感觉会很
我如何在RxJava中创建一个从不同的地方完成的对象(未来),但我想要向某个客户端返回一个可观察的对象?
问题内容: 只是想知道是否可以将一个类中的jTextArea追加到一个单独的类中?我基本上有一个简单的类,该类会不断运行计算,并且我想在自己的类中创建的GUI上查看输出。该程序可以通过System.out.println执行良好,但是我现在想在我的textarea上查看它。在此先感谢您的指导。 已更新-以下代码是我正在运行的代码。问题区域如下(这是一个很大类的方法): 我希望将此输出写入单独的jT