我想從資源庫中獲取Observable。我想知道我是否可以使用defer或fromCallable傳遞可觀察值。沒有我嘗試過的東西沒有工作.. 因此,任何人都可以給我一些示例代碼,演示如何將延遲或fromCallable傳遞給observable?rxandroid lambda with retrofit
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 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個問題
我想知道如何觀察到的使用推遲或使用retrofit2
fromCallable傳遞
我想知道如何使用lambda上訂閱
- 我是否正確使用rxandroid?
我目前通過從庫中觀察到的並在片段中訂閱。第二個答案可以解決工作問題......你能告訴我一些適用於改造的演示代碼嗎? – user3882878