使用RxJava上传Parse对象

时间:2016-10-22 22:02:36

标签: android parse-platform rx-java

我想将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包装这个调用,并在保存成功时收到通知?

2 个答案:

答案 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();
        }
}