我正在尝试了解MVP,RxJava,Dagger2,Retrofit,因此,我的问题是我正在关注this repository,这是真的吗?
public class MoviesRepository implements Repository {
private MoviesApiService moviesApiService;
private List<Result> results;
private long lastTimestamp;
private static final long CACHE_LIFETIME = 20 * 1000;
public MoviesRepository(MoviesApiService mService){
this.moviesApiService = mService;
this.lastTimestamp = System.currentTimeMillis();
this.results = new ArrayList<>();
}
public boolean isUpdated(){
return (System.currentTimeMillis() - lastTimestamp) < CACHE_LIFETIME;
}
@Override
public Observable<Result> getResultFromNetwork() {
Observable<TopMoviesRated> topMoviesRatedObservable = moviesApiService.getTopMoviesRated(1)
/*.concatWith(moviesApiService.getTopMoviesRated(2))
.concatWith(moviesApiService.getTopMoviesRated(3))*/;
return topMoviesRatedObservable
.concatMap(new Function<TopMoviesRated, Observable<Result>>() {
@Override
public Observable<Result> apply(TopMoviesRated topMoviesRated) {
return Observable.fromIterable(topMoviesRated.getResults());
}
}).doOnNext(new Consumer<Result>() {
@Override
public void accept(Result result) {
results.add(result);
}
});
}
@Override
public Observable<Result> getResultFromCache() {
if (isUpdated()){
return Observable.fromIterable(results);
}else {
lastTimestamp = System.currentTimeMillis();
results.clear();
return Observable.empty();
}
}
@Override
public Observable<Result> getResultData() {
return getResultFromCache().switchIfEmpty(getResultFromNetwork());
}
}
这里的某人告诉我,用这种方法将其复制到List<>
并不是一件好事,所以您可以向我推荐一种更好的方法吗?
注意:我的api调用是Single<Response>
,是否应该将存储库接口更改为Single<...>
?