如何在RxJava中公开具有多个回调的单个操作(例如,START与某些参数,STARTESS与其他参数多次调用,END与其他参数一起调用)?
我正在考虑使用一个包装器对象,该对象包含每种回调的observable,并且任何一个observable的订阅都会触发操作的开始,而另一个绑定在同一个底层操作上
编辑:下载操作的示例回调接口
interface Callback {
void onDownloadStarted(long contentLength, String mimeType, String nameHint);
void onDownloadProgress(long downloadedBytes);
void onDownloadCompleted(File file);
}
答案 0 :(得分:1)
您可以将您的操作视为Observable<Status>
public static class Info {
public final long contentLength;
public final String mimeType;
public final String nameHint;
public Info(long contentLength, String mimeType, String nameHint) {
this.contentLength = contentLength;
this.mimeType = mimeType;
this.nameHint = nameHint;
}
}
public static class Status {
public final Info info;
public final long downloadProgress; //in bytes
public final Optional<File> file;
public Status(Info info, long downloadProgress, Optional<File> file) {
this.info = info;
this.downloadProgress = downloadProgress;
this.file = file;
}
}
然后,您可以将下载操作建模为:
Observable<Status> download();
直到下载开始并且最终发射具有File
结果,您才会获得排放。
您可以像这样使用它:
download()
.doOnNext(status -> System.out.println(
"downloaded "
+ status.downloadProgress
+ " bytes of " + status.contentLength))
.last()
.doOnNext(status -> System.out.println(
"downloaded " + status.file.get())
.doOnError(e -> logError(e))
.subscribe();