Retrofit2结合RxJava使用教程

前言

相信小伙伴们就算没有用过retrofit也听说过吧,retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端,其内部就是对okhttp进行的一个封装,那么接下来,我就给大家带来Retrofit在平时开发中的一些用法。

用法

1.在你的项目中的gradle中配置

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.1.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.0'

这里说明一下,compile 'com.squareup.retrofit2:converter-gson:2.1.0'主要是针对返回值做一个gson解析,一般都会加上,而compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0''主要是配合rxjava使用,稍后会给大家带来retrofit如何配合rxjava使用。

2.自定义一个interface并且在里面配置请求
    public interface Service {
    @FormUrlEncoded
    @POST("user/login")
    Call Login(@FieldMap Map map);

现在看不懂没关系,大家只要知道,@POST代表是一个post请求,后面的("user/login")表示请求地址,泛型代表的是你要的返回值,方法里面的参数代表请求要携带的参数,登录一般都会要帐号密码,所以这里写的是一个Map集合。

3.开始做网络请求
        //拿到一个builder
        Retrofit.Builder builder = new Retrofit.Builder();
        //添加你的baseUrl,一般在开发中,baseUrl是固定的,大家可以定义一个常量
        builder.baseUrl("www.baseurl.com/");
        //添加Gson支持
        builder.addConverterFactory(GsonConverterFactory.create());
        //拿到一个retrofit对象
        Retrofit retrofit = builder.build();
        //传入你之前定义的一个接口
        Service service = retrofit.create(Service.class);
        Map map = new HashMap<>();
        map.put("name","用户名");
        map.put("psw","密码");
        //调用接口中你自己定义的方法,并传入参数,拿到一个call对象
        Call call = service.Login(map);
        //发送异步请求并添加回调,这里还有一个execute()是同步请求
        call.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                //请求成功,拿到返回值
            }
            @Override
            public void onFailure(Call call, Throwable t) {
                //请求失败
            }
        });

到了这里,一个完整的网络请求也就完成了,那么接下来给大家介绍介绍一些常用的注解。

4.常用注解介绍

@GET
get请求,分为不带参数,一个参数,多个参数
  1. 不携带参数
 @GET("user/login")
 Call Login();
  1. 携带一个参数
@GET("user/login")
Call Login(@Query("name") String name);
  1. 携带2个或多个参数
@GET("user/login")
Call Login(@QueryMap Map map);
@POST
post请求,分为一个参数,多个参数
  1. 携带一个参数
 @FormUrlEncoded
 @POST("user/login")
 Call Login(@Field("name") String name);
  1. 携带2个或多个参数
@FormUrlEncoded
@POST("user/login")
Call Login(@FieldMap Map map);

上面一些用法基本能满足大多数日常开发,如果还有哪些需要说明的欢迎留言。

5.结合RxJava使用

RxJava相信就不用我多介绍了,有多好用我相信大家深有体会,不会用的小伙伴请自行百度,RxJava教程还是比较多的。如果要结合RxJava使用,其实也不难,这里给大家举个栗子。

1. 首先把接口中的Call换成Observable,比如这样

public interface Service {
@FormUrlEncoded
@POST("user/login")
Observable Login(@FieldMap Map map);

2. 然后依然是前面的步骤,拿到Service对象
//因为接口定义的返回是Observable,所以这里可以直接链式调用
service.Login(map)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer() {
             @Override
             public void accept(@NonNull LoginResponse loginResponse) throws Exception {
//请求完成,做自己的事
                    }
                });

到此为止一个请求就完成了,大家可以对Retrofit做一个封装,如果有时间,我之后也会给大家带来Retrofit的封装。

以上纯属于个人平时工作和学习的一些总结分享,如果有什么错误欢迎随时指出,大家可以讨论一起进步。

你可能感兴趣的:(Retrofit2结合RxJava使用教程)