使用 RxJava 上传解析对象
Upload Parse Object with RxJava
我想将 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 包装这个调用并在保存成功时得到通知?
fix.save()
return 无效,因此您不能将其用作 Observable.just()
的参数。您可以 return 布尔值代替。
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);
}
}
});
}
您也可以使用 Completable。当您不使用 return 值时使用它。如果 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();
}
}
我想将 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 包装这个调用并在保存成功时得到通知?
fix.save()
return 无效,因此您不能将其用作 Observable.just()
的参数。您可以 return 布尔值代替。
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);
}
}
});
}
您也可以使用 Completable。当您不使用 return 值时使用它。如果 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();
}
}