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异常.
看一下本教程,因为它完全符合您的要求.基本上,您使用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()可以为每个订阅者使用相同的函数,因此它更有效.与往常一样,测量性能并在必要时进行优化.
| 归档时间: |
|
| 查看次数: |
4431 次 |
| 最近记录: |