美文网首页RxJava入门到精通
Android进阶学习RxJava(六)Retrofit网络请求

Android进阶学习RxJava(六)Retrofit网络请求

作者: 郝大富 | 来源:发表于2020-10-29 19:09 被阅读0次

    Retrofit 破冰

    Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装
    网络请求仍然由优秀的 OkHttp 完成
    所以 Retrofit 只是一个好看的网络请求类包装,不要怕,简单易懂

    Retrofit 使用环境配置

    为了方便以后交火 与 RxJava 的依赖放到一起了
    以下是依赖

        implementation 'com.squareup.retrofit2:retrofit:2.1.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
    
        implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
        implementation 'com.google.code.gson:gson:2.8.5'
    
        implementation 'io.reactivex:rxjava:1.1.1'
        implementation 'io.reactivex:rxandroid:1.0.1'
    
    

    配置环境重点中的重点,添加网络权限
    很多小伙伴写完代码后,发现怎么都请求不了网络,大部分是这个问题

    <uses-permission android:name="android.permission.INTERNET"/>
    

    网络请求多数是 JSON,添加了 gson 作为转换,也可以根据需要添加别的转换库

    Retrofit 主要定义了 4 个接口:

    • Callback<T>:请求数据的返回
    • Converter<F, T>:对返回数据进行解析和转换,在这里用 gson
    • Call<T>:发送请求,Retrofit 默认的实现是 OkHttpCall<T>,重点是Call<T>,T为泛型
    • CallAdapter<T>:将 Call 对象转换成其他对象,通常和 RxJava 放在一起联动

    先准备两个数据接口,没有免费接口的同学,可以用我的

    1. 获取所有名字(点击或粘贴到地址栏可预览)

    2. 根据名字获取详细信息(点击或粘贴到地址栏可预览)

    开始撸码

    一、养成好的编码习惯,先要新建一个 Urls 类,用来记录网络接口

    
    public class Urls {
        public static final String Base = "https://leogyy.com/";
    
        // 获得所有的名字
        public static  final  String get_name_all = "get_name_all";
        // 根据名字查询详细信息
        public static  final  String get_name_info = "get_name_info";
    }
    
    

    二、创建网络返回 JavaBean 类

    1. 使用 PostMan 请求接口,拿到返回 JSON
    2. 用在线 JavaBean 粘贴 JSON 生成 Bean 类(搜索 JSON 转JavaBean )
    • get_name_all 返回 JSON 数据
    {
        "code": 1,
        "info": "SUCCESS_DATA",
        "data": [
            "小明",
            "小花",
            "小华",
            "小菜",
            "小芳",
            "小米"
        ]
    }
    
    • get_name_info 返回 JSON 数据
    {
        "code": 1,
        "info": "SUCCESS_DATA",
        "data": {
            "姓名": "小明",
            "身高": "175",
            "爱好": "读书"
        }
    }
    

    三、创建 Retrofit 网络请求的注解接口

    public interface API_Protocol {
        @POST(Urls.get_name_all)
        Call<NameBean> getAllName_Bean();
    
        @POST(Urls.get_name_info)
        Call<NameInfoBean> getNameInfo_Bean(@Query("name") String name);
    }
    
    

    四、创建 Retrofit 请求

    // 把这个放到Activity的全局变量中,同时在销毁Activity时再次置空,防止内存泄露
    public static Retrofit retrofit = null;
    
    //Activity 加载时候调用以下代码
    retrofit = new Retrofit.Builder()
             .baseUrl(Urls.Base)
             .addConverterFactory(GsonConverterFactory.create())
             .build();
    
    

    五、发起 Retrofit 网络请求

    
    // 发起网络请求
     API_Protocol API_protocol = retrofit.create(API_Protocol.class);
     Call<NameBean> call = API_protocol.getAllName_Bean();
     call.enqueue(new Callback<NameBean>() {
         @Override
         public void onResponse(Call<NameBean> call, Response<NameBean> response) {
             //数据请求成功
             LogUtils.e(response.body().getMessage());
             NameBean nameAll = response.body();
            
         }
    
         @Override
         public void onFailure(Call<NameBean> call, Throwable t) {
             //数据请求失败
             LogUtils.e("Net_Error" + t.getMessage());
             ToastUtil.showNetError();
         }
     });
    
    

    五、总结

    Retrofit 使用很简单,重要的是理解封装概念
    封装可以让用户使用起来更容易,代码更优雅

    相关文章

      网友评论

        本文标题:Android进阶学习RxJava(六)Retrofit网络请求

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