gpt4 book ai didi

java - RxJava : Watch custom class

转载 作者:行者123 更新时间:2023-12-02 03:21:09 25 4
gpt4 key购买 nike

我有一个自定义类,将其称为Builder。它有一个执行异步操作的方法act()。当操作完成时,我想发出一个事件。

如何在 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 并链接结果,但现在我将采用简单的用例!

最佳答案

这可以在 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;
}
}

此类将帮助您发出并订阅它,以便在应用程序中的任何位置监听该特定事件。下面我尝试向您展示如何发出该监听器并将其挂接到您的 Activity 或片段中。

A.用于从您的构建器类发出消息

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

B.另一个端点,您可以通过订阅来收听它。

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

C.最后,确保您应该在 Activity 销毁时取消订阅它。

希望对你有帮助。如果您能理解任何一点,请告诉我。

谢谢,巴夫迪普

关于java - RxJava : Watch custom class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39581751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com