3.1 Retrofit 简单使用

1.简介

在Andrroid开发中,Retrofit是当下最热的一个网络请求库,Retrofit其实我们可以理解为OkHttp的加强版,它也是一个网络加载框架。底层是使用OKHttp封装的。准确来说,网络请求的工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口的封装。它的一个特点是包含了特别多注解,方便简化你的代码量。并且还支持很多的开源库(著名例子:Retrofit + RxJava)。Retrofit和OkHttp都是square公司写的.
特别注意:
准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。
原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装

App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作
在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用户的需求对结果进行解析

2.使用步骤

步骤1:添加Retrofit库的依赖
步骤2:创建 接收服务器返回数据 的类
步骤3:创建 用于描述网络请求 的接口
步骤4:创建 Retrofit 实例
步骤5:创建 网络请求接口实例 并 配置网络请求参数
步骤6:发送网络请求(异步 / 同步 封装了 数据转换、
步骤7: 处理服务器返回的数据

2.1 添加Retrofit库的依赖

  1. 在 Gradle加入Retrofit库的依赖
implementation 'com.squareup.retrofit2:retrofit:2.4.0'//Retrofit依赖
implementation 'com.squareup.retrofit2:converter-gson:2.4.0' // 可选依赖,解析json字符所用
  1. 添加 网络权限
<uses-permission android:name="android.permission.INTERNET"/>

2.2 创建 接收服务器返回数据 的类(Java bean类)

public class Bean implements Serializable{
    ......
}

2.3 创建 用于描述网络请求 的接口

Retrofit将 Http请求 抽象成 Java接口:采用 注解 描述网络请求参数 和配置网络请求参数
用 动态代理 动态 将该接口的注解“翻译”成一个 Http 请求,最后再执行 Http 请求
注:接口中的每个方法的参数都需要使用注解标注,否则会报错

public interface ApiService {
    //ResponseBody,响应体,没有转换成实体类
    @POST("user/login")
    Call<ResponseBody> login3(@Body RequestBody body);
    
    @GET("10/{page}")
    Call<Bean> getData(@Path("page") int page);
    // @GET注解的作用:采用Get方法发送网络请求
    // getData() = 接收网络请求数据的方法
    // 其中返回类型为Call<*>,*是接收数据的类(即上面定义的Bean类)
    // 如果想直接获得Responsebody中的内容,可以定义网络请求返回值为Call
}

2.4 创建 Retrofit 实例

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://gank.io/api/data/福利/") // 设置网络请求的Url地址
                .addConverterFactory(GsonConverterFactory.create()) // 设置数据解析器
                .build();

关于数据解析器(Converter)

Retrofit支持多种数据解析方式使用时需要在Gradle添加依赖

数据解析器 Gradle依赖
Gson com.squareup.retrofit2:converter-gson:2.0.2
Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML com.squareup.retrofit2:converter-simplexml:2.0.2
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi com.squareup.retrofit2:converter-moshi:2.0.2
Wire com.squareup.retrofit2:converter-wire:2.0.2
Scalars com.squareup.retrofit2:converter-scalars:2.0.2

2.5 创建 网络请求接口实例

// 创建 网络请求接口 的实例
        ApiService apiService = retrofit.create(ApiService.class);
        //对 发送请求 进行封装
        Call<Bean> call = apiService.getData(1);

2.6 发送网络请求(异步 / 同步)

封装了 数据转换、线程切换的操作
//发送异步网络请求
call.enqueue(new Callback<Bean>() {
            @Override
            public void onResponse(Call<Bean> call, Response<Bean> response) {    //请求成功
                Log.d(TAG, "getData1: " + Thread.currentThread().getName() + "data:" + response.body().toString());
                mBtn1.setText(response.body().toString());
            }
            @Override
            public void onFailure(Call<Bean> call, Throwable t) {
                //请求失败
            }
        })

//发送同步网络请求,需要在子线程调用

Response<Bean> execute = call.execute();

2.7 处理返回数据

注意response.body().string() 只能使用一次。

通过response类的 body()对返回的数据进行处理

你可能感兴趣的:(Android-6)