如何在Android中创建Observable?

Dei*_*son 8 android rx-java rx-android

我想要做的是创建一个简单的内存缓存,只是为了尝试Observables.但是我被卡住了,因为我不明白如何创建一个observable.这是我到目前为止的代码:

public class MovieCache {
    MovieWrapper movieWrapper;

    public Observable<MovieWrapper> getMovies() {
       //How to create and return an Observable<MovieWrapper> here?
    }

    public void setCache(MovieWrapper wrapper) {
        movieWrapper = wrapper;
    }

    public void clearCache() {
        movieWrapper = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

getMovies()方法中,我想创建一个Observable并将我的本地字段movieWrapper返回给订阅者.我怎样才能做到这一点?我尝试使用new Observable.just(movieWrapper)但它导致null异常.

Ric*_*rdo 6

看一下本教程,因为它完全符合您的要求.基本上,您使用defer()以确保始终获得最新版本的缓存对象:

public class MovieCache {
    MovieWrapper movieWrapper;

    public Observable<MovieWrapper> getMovies() {  
        return Observable.defer(new Func0<Observable<MovieWrapper>>() {
            @Override
            public Observable<MovieWrapper> call() {
                return Observable.just(movieWrapper);
            }
        });
    }

    public void setCache(MovieWrapper wrapper) {
        movieWrapper = wrapper;
    }

    public void clearCache() {
        movieWrapper = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

defer()可以确保您将在获取对象认购Observable不是创造.

但请注意,根据该帖子的作者:

defer()的唯一缺点是每次获得订阅者时它都会创建一个新的Observable.create()可以为每个订阅者使用相同的函数,因此它更有效.与往常一样,测量性能并在必要时进行优化.