自己也是最近幾天看了相關的文章,就嘗試寫了一下,有點小激動,純粹是爲了記錄一下
一.依賴如下
二。直接上正題
1.url用的是豆瓣的:
BASE_URL = "https://api.douban.com/v2/movie/"
配置retrofit
public class HttpMethods { public static final String BASE_URL = "https://api.douban.com/v2/movie/"; private static final int DEFAULT_TIMEOUT = 5; private Retrofit retrofit; private MovieService movieService; private HttpMethods() { //手動創建一個OkHttpClient並設置超時時間 OkHttpClient mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//設置連接超時時間 .readTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//設置讀取超時時間 .writeTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//設置寫入超時時間 // .addInterceptor(InterceptorUtil.HeaderInterceptor())//添加其他攔截器 .addInterceptor(InterceptorUtil.LogInterceptor())//添加日誌攔截器 .build(); retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create())
//這裏就是retrofit和rxjava扯上關係了 .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .baseUrl(BASE_URL) .client(mOkHttpClient) .build(); movieService = retrofit.create(MovieService.class); } //在訪問HttpMethods時創建單例 private static class SingletonHolder { private static final HttpMethods INSTANCE = new HttpMethods(); } //獲取單例 public static HttpMethods getInstance() { return SingletonHolder.INSTANCE; } public MovieService API() { return movieService; } /** * 用於獲取豆瓣電影Top250的數據 * @param * @param start 起始位置 * @param count 獲取長度 */ public void getTopMovie(Subscriber<MovieEntity> subscriber, int start, int count){ movieService.getTopMovie(start, count) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); }
2.定義api
public interface MovieService { @GET("top250") Flowable<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count);
MovieEntity爲具體的實體類,我就不貼出來了
3.高潮來了
/** * 第一種retrofit2 和Rxjava2 結合成功獲取數據的方案 */ HttpMethods.getInstance().API() .getTopMovie( 0, 10) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<MovieEntity>() { @Override public void accept(MovieEntity movieEntity) throws Exception { MovieEntity ob = movieEntity; List<MovieEntity.SubjectsBean> subjects = ob.getSubjects(); tv_title.setText(subjects.get(2).getTitle()); } }); /** * 第二種retrofit2 和Rxjava2 結合成功獲取數據的方案 */ HttpMethods.getInstance().API() .getTopMovie( 0, 10) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<MovieEntity>() { @Override public void onSubscribe(Subscription s) {
//這裏注意了,一定要設置,只有設置了,接下來的方法纔會被調用 s.request(Long.MAX_VALUE); tv_title.setText("I got it "); } @Override public void onNext(MovieEntity movieEntity) { MovieEntity ob = movieEntity; List<MovieEntity.SubjectsBean> subjects = ob.getSubjects(); tv_title.setText(subjects.get(2).getTitle()); } @Override public void onError(Throwable t) { tv_title.setText(" a error"); } @Override public void onComplete() { tv_title.setText("it is finished"); } });
}