将参数传递给Observable.create

时间:2015-12-10 12:00:17

标签: android reactive-programming rx-java

我在Android上使用RXJava异步访问数据库。

我想在我的数据库中保存一个对象。 通过这种方式,我创建了一个方法,它接受一个最终参数(我想要保存的对象)并返回一个Observable。

此时我并不在意任何事情,所以最后我会打电话给subscriber.onComplete()

这是我的代码:

public Observable saveEventLog(@NonNull final EventLog eventLog) {
    return Observable.create(new Observable.OnSubscribe<Object>() {
        @Override
        public void call(Subscriber<? super Object> subscriber) {
            DBEventLog log = new DBEventLog(eventLog);
            log.save();
            subscriber.onCompleted();
        }
    });
}

问题是,我看到很多人使用参数的final关键字回答,但我想在没有它的情况下这样做。 原因是我不太喜欢声明最终变量的方法,以便在另一个线程中使用它。

还有其他选择吗?感谢。

1 个答案:

答案 0 :(得分:6)

我们通常建议避免使用create,因为使用它似乎很简单,但它们通常违反了RxJava的高级要求。相反,您应该使用Observable的工厂方法之一。在您的情况下,just工厂方法将获得您想要的:没有最终参数:

public Observable<?> saveEventLog(@NonNull EventLog eventLog) {
    return Observable
    .just(eventLog)
    .doOnNext(e -> {
         DBEventLog log = new DBEventLog(e);
         log.save();
    })
    .ignoreElements();
}