【发布时间】:2016-03-01 03:00:02
【问题描述】:
我正在尝试从存储库中获取 Observable。我想知道是否可以使用 defer 或 fromCallable 传递 observable。我试过的东西都没有用.. 那么谁能给我一些示例代码来演示如何使用 defer 或 fromCallable 传递 observable?
Retrofit
@GET("3/discover/movie")
Observable<MovieDataContainer> getMovieList2(@Query("sort_by") String sort,@Query("api_key") String api_key,@Query("page") int page);
存储库代码
public <T> Observable.Transformer<T, T> applySchedulers() {
return observable -> observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@Override
public Observable<MovieDataContainer> getMovieByFilter(String sortBy, String apiKey, int number) {
MovieApiService movieApiService=mMovieRetrofit.createService(MovieApiService.class);
return movieApiService.getMovieList2(sortBy,apiKey,number).compose(applySchedulers());
}
在片段中我得到像这样的 Observable(取消选中调用警告)
Observable movieObservable = new MovieApiRepository(new MovieRetrofit()).getMovieByFilter("popularity.desc", BuildConfig.MOVIE_DB_API_KEY, 1);
movieObservable.subscribe(new Observer<MovieDataContainer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MovieDataContainer movieDataContainer) {
MoviePosterGridAdapter movieAdapter=
new MoviePosterGridAdapter(
getActivity().getApplicationContext(),
R.layout.movie_poster_imageview,
movieDataContainer.getResults()
);
GridView grid = (GridView) getView().findViewById(R.id.movie_grid);
grid.setAdapter(movieAdapter);
}
});
如何使用 lambda 缩短我的代码? 我试过这样,但它不能识别参数(movieContainer)
movieObservable.subscribe(movieContainer->{
MoviePosterGridAdapter movieAdapter=
new MoviePosterGridAdapter(
getActivity().getApplicationContext(),
R.layout.movie_poster_imageview,
movieDataContainer.getResults()
);
GridView grid = (GridView) getView().findViewById(R.id.movie_grid);
grid.setAdapter(movieAdapter);
});
我基本上有3个问题
我想知道如何使用 defer 或 fromCallable 使用 retrofit2 传递 observable
我想知道如何在订阅时使用 lambda
- 我使用 rxandroid 是否正确?
【问题讨论】:
标签: android rx-java observable rx-android