Android框架式编程之Retrofit

时间:2022-09-01 18:02:02

一、Retrofit 简介

Retrofit 官网地址: https://github.com/square/retrofit

Retrofit(即Retrofit,目前最新版本为2.6.0版本),是目前非常流行的网络请求框架,底层是基于okHttp实现的。准确来说Retrofit是对okHttp的进一步封装,它功能强大,支持同步和异步,支持多种数据的解析方式(默认为Gson),支持RxJava。

Retrofit 最大的优势就是简洁易用,它通过注解配置网络请求的参数,采用大量的设计模式来简化我们的使用。而且它的拓展性也做的相当的好,Retrofit 的功能模块高度封装,高内聚低耦合,我们可以自定义自己想要的组件,比如说我们可以自己选择解析工具而不用默认的Gson。除此之外,Retrofit 还有诸如性能好,处理速度快,代码简化等优势。

二、Retrofit 注解

 使用 Retrofit 前我们不得不提一下注解,正是这些注解极大的方便了我们的代码编写及逻辑流程的控制。

1. 请求方法注解

  • @GET:GET请求
  • @POST:POST请求
  • @DELETE:DELETE请求
  • @HEAD:HEAD请求
  • @OPTIONS:OPTIONS请求
  • @PATCH:PATCH请求

2. 请求参数

  • @Headers:添加请求头
  • @Path:替换路径
  • @Query:替代参数值,通常是结合get请求的
  • @FormUrlEncoded:用表单数据提交
  • @Field:替换参数值,是结合post请求的

二、Retrofit 使用

Retrofit代码实现步骤如下:

1)创建Retrofit 实例。

2)定义接口,使用注解的形式封装请求地址和请求参数

3)通过Retrofit实例,获取一个接口服务对象

4)通过接口服务对象调用接口中的方法,获取call对象

5)Call对象执行请求(异步请求、同步请求)

0. 准备工作

由于Retrofit是基于OkHttp,所以还需要添加OkHttp库依赖,需要在build.grale添加如下依赖:

dependencies {
    // Okhttp库
    compile ‘com.squareup.okhttp3:okhttp:3.10.0‘
    // Retrofit库
    compile ‘com.squareup.retrofit2:retrofit:2.6.0‘
}

添加网络权限

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

创建接收服务器返回数据的类:

public class Blog {
    // 根据返回数据的格式和数据解析方式(Json、XML等)定义
    ...
}

1. 创建Retrofit实例

创建Retrofit实例时需要通过 Retrofit.Builder,并调用baseUrl方法设置URL。

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("http://localhost:4567/")
        .build();

注意:Retrofit 的 baseUlr 必须以 /(斜线) 结束,不然会抛出一个IllegalArgumentException。

2. 定义接口

定义请求接口的方式示例如下:

public interface BlogService {
    @GET("blog/{id}")
    Call<ResponseBody> getBlog(@Path("id") int id);
}

注意这里的 interface不是class,所以我们是无法直接调用该方法,我们需要用Retrofit创建一个BlogService的代理对象。

BlogService service = retrofit.create(BlogService.class);

拿到代理对象之后,就可以调用了。

3. 接口调用

调用方式的示例如下:

Call<ResponseBody> call = service.getBlog(2);
// 通过call对象执行网络请求(同步请求execute,异步请求enqueue)
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        try {
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        t.printStackTrace();
    }
});

至此,使用Retrofit 就能够进行基本的网络请求了,如果需要更深层的使用,可以参考一下资料进行使用,后续我们在对这些高级的使用方法进行一一整理。

1. https://www.jianshu.com/p/308f3c54abdd  

2. https://github.com/ikidou/Retrofit2Demo/tree/master/client/src/main/java/com/github/ikidou

3. https://www.jianshu.com/p/0fda3132cf98 

4. https://blog.csdn.net/chenrushui/article/details/71541288