我想将parse.com中的同步方法主要包装为ParseObject.save()到RxJava包装器中。我想出了以下内容:
public Observable<Void> uploadFix(final ParseObject parseObject) {
return Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
try {
return Observable.just(fix.save());
} catch (ParseException e) {
return Observable.error(e);
}
}
});
}
这给了我一个错误:Observable不能应用于void。
基本上有没有办法用RxJava包装这个调用,并在保存成功时收到通知?
答案 0 :(得分:0)
fix.save()
返回void,因此您无法将其用作Observable.just()
的参数。你可以改为返回一个布尔值。
public Observable<Boolean> uploadFix(final ParseObject parseObject) {
return Observable.defer(new Func0<Observable<Boolean>>() {
@Override
public Observable<Boolean> call() {
try {
fix.save();
return Observable.just(true);
} catch (ParseException e) {
return Observable.error(e);
}
}
});
}
答案 1 :(得分:0)
您也可以使用Completable。除了返回值之外,不使用它。如果Android的RxJava将升级到版本2,则不能再使用Observabl,因为不再允许空值。
请看我的例子。我正在使用RxJava2-RC5进行测试。测试应该在2秒内完成+开销。
@org.junit.Test
public void name() throws Exception {
Completable completable = Completable.fromAction(() -> doWorkSync());
TestObserver<Void> test = completable.test();
test.assertComplete();
}
private void doWorkSync() {
// simulate work
try {
Thread.sleep(2_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}