美文网首页
Android Retrofit2+RxJava学习

Android Retrofit2+RxJava学习

作者: 猪爸爸Hulk | 来源:发表于2017-12-19 17:25 被阅读18次
Retrofit2

一、Retrofit2基本用法

    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
1.初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://m.maoyan.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
2.初始化GET、POST接口
无参数GET请求
   /*
    * 猫眼电影影院
    * http://m.maoyan.com/cinemas.json
    */
    @GET("cinemas.json")
    Call<CinemaInfo> getCinemas();
动态的GET请求
   /*
    * 查看电影详情
    * http://m.maoyan.com/movie/xxxx.json
    */
    @GET("movie/{movieId}")
    Call<MovieDetail> getMovieDetail(@Path("movieId") String movieId);
带参数的GET请求
   /*
    * 猫眼电影列表
    * http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1000
    */
    @GET("movie/list.json")
    Call<MovieHot> getMovie(@Query("type") String type, @Query("offset") int offset, @Query("limit") int limit);
带json字符串的POST请求
    @POST("user_register")
    Call<RegisterResult> userRegister(@Body UserInfo userInfo);
带键值对的POST请求
    @POST("user_login")
    @FormUrlEncoded
    Call<LoginResult> userLogin(@Field("username") String username, @Field("password") String password);
3.开始请求
RetrofitApi retrofitApi = retrofit.create(RetrofitApi.class);
retrofitApi .getCinemas().enqueue(new Callback<CinemaInfo>() {
            @Override
            public void onResponse(Call<CinemaInfo> call, Response<CinemaInfo> response) {
                if (response.isSuccessful()) {
                    CinemaInfo cinemaInfo = response.body();
                    int status = cinemaInfo.getStatus();
                    System.out.println("status:" + status);
                    int expires = cinemaInfo.getControl().getExpires();
                    System.out.println("expires:" + expires);
                }
            }

            @Override
            public void onFailure(Call<CinemaInfo> call, Throwable t) {

            }
        });

二、RxJava2基本用法

    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'io.reactivex.rxjava2:rxjava:2.1.7'

Observable(被观察者)/Observer(观察者)
Flowable(被观察者)/Subscriber(观察者)

RxJava2
Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<Integer> e) throws Exception {

            }
        }).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Integer integer) {

            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

三、Retrofit2+RxJava

1.初始化Retrofit
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://m.maoyan.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
2.请求API变化
   /*
    * 猫眼电影列表
    * http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1000
    */
    @GET("movie/list.json")
    Observable<MovieHot> getMovie(@Query("type") String type, @Query("offset") int offset, @Query("limit") int limit);
3.开始请求
RetrofitApi retrofitApi = retrofit.create(RetrofitApi.class);
        Observable<MovieHot> observable = retrofitApi.getMovie("hot", 0, 5);
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<MovieHot>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        System.out.println("onSubscribe");
                    }

                    @Override
                    public void onNext(@NonNull MovieHot movieHot) {
                        if (movieHot.getStatus() == 0) {
                            System.out.println("size:-----" + movieHot.getData().getMovies().size());
                        }
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        System.out.println("onError");
                    }

                    @Override
                    public void onComplete() {
                        System.out.println("onComplete");
                    }
                });

四、RetrofitUtil

public class RetrofitUtil {

    private volatile static RetrofitUtil retrofitUtil;
    private ApiService apiService;

    private RetrofitUtil() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .cache(new Cache(new File(Environment.getExternalStorageDirectory() + "/MoviewMan"), 1024 * 1024 * 8))
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://m.maoyan.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();
        apiService = retrofit.create(ApiService.class);
    }

    public static RetrofitUtil getInstance() {
        if (retrofitUtil == null) {
            synchronized (RetrofitUtil.class) {
                if (retrofitUtil == null) {
                    retrofitUtil = new RetrofitUtil();
                }
            }
        }
        return retrofitUtil;
    }

    public ApiService getApiService() {
        return apiService;
    }
}

相关文章

网友评论

      本文标题:Android Retrofit2+RxJava学习

      本文链接:https://www.haomeiwen.com/subject/mxxiwxtx.html