Retrofit 是如何 创建 一个http 请求的?
第一步:创建 Retrofit.Builder
Retrofit.Builder builder = new Retrofit.Builder();
第二步:builder 有很多属性 但是 比较重要的 几个 也是必须设置的
builder.baseUrl("www.baidu.com");
builder.addCallAdapterFactory();
builder.addConverterFactory();
注:以上三个 属性必须设置否则会报错,运行不起来 (实际情况中我们 还需要设置 client(OkHttpClient) 如果不设置 retrofit 会默认一个)
a、 baseUrl 如果 不设置 baseUrl 会报错误 错误
"Base URL required."
a:如果你项目中 一直使用全路径,这个配置 可以随便填一个地址(为了 适配 注解中 url 占位 及 url 路径 的使用方式 所以 retrofit 规定 必须设置 url)
b、设置的属性 时怎么绑定到 OkHttpCall 里面去的?(以下 四个代码点 核心绑定过程。 第四点 实现)
第一个点:从 Retrofit creat 方法中
主要作用:是 绑定 Observable 返回值 和方法;(具体代码 我们可以再 Retrofit 源代码中找到)
public <T> T create(final Class<T> service) {
Utils.validateServiceInterface(service);
if (validateEagerly) {
eagerlyValidateMethods(service);
}
// 通过Proxy 代理类 生成 api 类 的对象(所谓 api 类 就是 我们 写 注解的 那个接口类 下面注释)
return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
new InvocationHandler() {
// 当 你调用某个 接口方法 时 触发这里,..比如 demo api 中调用 ge