Retrofit网络框架1:基本使用

0.设计模式

有很好的拓展性,可以跟RxJava、Json、OkHttp等主流库进行无缝对接。

  • 动态代理: 解析GitHubService 接口中的请求方法,将注解拼装成完整的url。
  • Builder模式:Retrofit对象的构建.

1.基本介绍

Retrofit 是一个OkHttp网络请求框架的封装,它不是一个网络框架。
它的内核目前默认是OkHttp实现的。
专注于接口的封装工作; OkHttp专注于网络的高效率请求。分工合作,更提高效率。

【Application Layer】
    ↓   ↑
【Retrofit Layer】封装请求参数、头部、url等。
    ↓   ↑
【OkHttp Layer】
    ↓   ↑
【Server服务器】

总结:

1.App应用程序通过 Retrofit 请求网络,实际上是使用Retrofit 接口层封装请求参数(header,url信息),
之后由OkHttp完成后续的请求操作.
2.在服务器返回数据之后,OkHttp 将原始的结果还给Retrofit,Retrofit 根据用户的需求对结果进行解析。
完成各种数据的转换,和适配工作。

2. 常用注解的区别。

注解 用途 示例
@Path URL 路径动态部分 users/{id}
@Query URL 查询参数 ?name=value
@QueryMap 多个查询参数 ?k1=v1&k2=v2
@Body 请求体 POST/PUT 的 JSON 数据

3.Retrofit框架网络请求的7个步骤:

3.1 app.build.gradle添加Retrofit库的依赖,网络权限。

    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.retrofit2:converter-scalars:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

3.2 添加返回的Bean

public class Repo {}

3.3 添加接口interface,里面的请求使用注解 标识。

import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;

public interface GitHubService {
    //subUrl
    @GET("users/{user}/repos") //{}是动态变化的,是下面user传进来的
    Call<List<Repo>> listRepos(@Path("user") String user);//当user对象未设置值,默认使用'user'
}

@GET 这里使用的注解,内部机制,通过动态代理模式,将接口的注解翻译成一个Http请求,最后再执行http请求。

3.4 创建Retrofit实例

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://api.github.com/") //baseUrl
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //支持RxJava
                .addConverterFactory(GsonConverterFactory.create()) //将返回的httpResponse 转换为Java对象
                .build();

// 完整url =BaseUrl +subUrl。

3.5 创建网络请求的接口实例

    GitHubService service = retrofit.create(GitHubService.class);
    Call repos = (Call) service.listRepos("XXXX"); //构建okHttp的Call对象。

3.6 进行同步或异步请求;3.7处理成功和失败的回调。

  repos.enqueue(new Callback() { //3.6开始异步请求
    @Override
    public void onFailure(Call call, IOException e) {
        System.out.println("请求失败,onFailure");
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        // 3.7 处理成功和失败的回调。
        System.out.println("请求成功:" + response.body());
    }
  });

总结:

  • 添加Retrofit库的依赖,添加网络权限;
  • 创建 接受服务器返回数据的bean类;
  • 创建 用于描述网络请求 的Java接口(注解 描述/配置网络请求参数、);
    内部原理:动态代理,将接口的注解翻译成一个个http请求,最后由线程池执行http请求。
  • 创建 Retrofit 实例;
  • 创建 网络请求接口实例
  • 发送网络请求(同步/异步)
  • 处理服务器返回的数据。

--------End-------------------

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容