在域异步事务执行后返回Completable

问题描述 投票:0回答:3

我正在使用领域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);
        }
    });
}

此代码显然无法编译,因为缺少返回。我如何在这里返回可完成的结果?

谢谢

android rx-java2 realm-mobile-platform
3个回答
1
投票

重要的是要记住,在调用subscribe之前,Rx对象通常不会执行任何操作。

您应该查看Completable.create以了解如何将“操作”转换为可以完成或导致错误的Completable。


0
投票

希望这可以帮到你

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);
                }
            });
        }
    });
}

-1
投票

对于可能涉及的人来说,解决方案正在使用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对象只能在创建它们的线程上访问。

© www.soinside.com 2019 - 2024. All rights reserved.