Android进阶学习RxJava(六)Retrofit网络请求,内有免费接口福利

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

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

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

    • 接口地址: https://leogyy.com/study/get_name_all
    • 请求参数: 无参数
    • 请求方法: GET
    • 返回格式: JSON
  2. 根据名字获取详细信息(点击或粘贴到地址栏可预览)

    • 接口地址: https://leogyy.com/study/get_name_info
    • 请求参数: name
    • 请求方法: POST
    • 返回格式: JSON

开始撸码

一、养成好的编码习惯,先要新建一个 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 使用很简单,重要的是理解封装概念
封装可以让用户使用起来更容易,代码更优雅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值