我正在使用领域3.4和rx java2。我想要完成的是在将数据插入领域后返回Completable。
public Completable insertSamplesRx(final List<Sample> sampleList) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
for(Sample s : sampleList) {
realm.insertOrUpdate(sampleList);
}
}
}, new Realm.Transaction.OnSuccess() {
@Override
public void onSuccess() {
Completable.complete();
}
}, new Realm.Transaction.OnError() {
@Override
public void onError(Throwable error) {
Completable.error(error);
}
});
}
此代码显然无法编译,因为缺少返回。我如何在这里返回可完成的结果?
谢谢
重要的是要记住,在调用subscribe
之前,Rx对象通常不会执行任何操作。
您应该查看Completable.create
以了解如何将“操作”转换为可以完成或导致错误的Completable。
希望这可以帮到你
public Completable updateChangeSancions(int resultId,int inspetionId, int sanction) {
return Completable.fromAction(() -> {
try (Realm r = Realm.getDefaultInstance()) {
r.executeTransaction(realm -> {
RealmResults<InspeccionDetalle> detalles = realm.where(Inspection.class)
.equalTo("resultId", 1)
.equalTo("inspetionId", resultId)
.findAll();
for (InspeccionDetalle i : detalles) {
i.setPersonalSancios(sanction);
}
});
}
});
}
对于可能涉及的人来说,解决方案正在使用from action,如果出现错误则会抛出异常,并强制Completable触发错误。
public Completable insertSamples(final List<Sample> sampleList) {
return Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
realm = Realm.getDefaultInstance();
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.insertOrUpdate(sampleList);
}
});
}
});
}
重要的是要注意,不需要对realm实例进行显式调用
java.lang.IllegalStateException:从错误的线程访问Realm。 Realm对象只能在创建它们的线程上访问。