Retrofit的源码分析
2017-06-02 20:43
316 查看
Retrofit是一个网络请求框架 也就是说用来做网络请求的
Retrofit现在形势大好 我们在很多项目中都会选择使用Retrofit做网络请求
选择使用retrofit的原因是因为他底层是封装了okhttp做网络请求 2.0以后封装的应该还是okhttp3
接下来就谈一下retrofit的源码吧
他是通过注解方式进行get post请求
这样的好处就是为了解耦我们都知道使用注解的 优点是为了类与类之间的解耦
1、通过配置gradle配置将Retrofit框架引入项目。
先倒入依赖
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
首先需要声明一个接口 这个接口里面声明了被注解的请求方法
public interface ApiService {
@GET("service/getIpInfo.php")
Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
}
Retrofit retrofit = new Retrofit.Builder()
通过构建者模式构建出retrofit对象 在这里面也可以指定他的平台是安卓还是ios
.baseUrl(ENDPOINT)
baseurl里面也是经过了httpurl的解析 规定了baseurl的末尾必须是以斜杠结束 后续的Api不能以斜杠开头
.addConverterFactory(GsonConverterFactory.create())
.build();
创建这个apiservice对象是通过代理的模式 因为代理模式的只能针对接口创建代理类
所以在create的时候先判断传进来的是不是一个接口 不是就抛出异常
他里面有一个invoke方法 这个方法是InvocationHandler中的唯一的一个方法
他会将对方法的调用指派到invoke方法中进行处理
method是一个对象的metod时会吧方法加载到ServiceMethod中 这里用了缓存 如果缓存中有就直接用如果没有的话就new出来
ServiceMethod 初始化了一个OkHttpCall对象 最后通过calladapter 的adapter方法返回了一个代理Call的实例
ApiService apiService = retrofit.create(ApiService.class);
mProgressBar.setVisibility(View.VISIBLE);
Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");
call.enqueue(new Callback<GetIpInfoResponse>() {
@Override
public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
mProgressBar.setVisibility(View.GONE);
GetIpInfoResponse getIpInfoResponse
9255
= response.body();
mTvContent.setText(getIpInfoResponse.data.country);
}
@Override
public void onFailure(Throwable t) {
mProgressBar.setVisibility(View.GONE);
mTvContent.setText(t.getMessage());
}
});
}
});
Retrofit现在形势大好 我们在很多项目中都会选择使用Retrofit做网络请求
选择使用retrofit的原因是因为他底层是封装了okhttp做网络请求 2.0以后封装的应该还是okhttp3
接下来就谈一下retrofit的源码吧
他是通过注解方式进行get post请求
这样的好处就是为了解耦我们都知道使用注解的 优点是为了类与类之间的解耦
1、通过配置gradle配置将Retrofit框架引入项目。
先倒入依赖
compile 'com.squareup.retrofit:retrofit:2.0.0-beta2'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2'
首先需要声明一个接口 这个接口里面声明了被注解的请求方法
public interface ApiService {
@GET("service/getIpInfo.php")
Call<GetIpInfoResponse> getIpInfo(@Query("ip") String ip);
}
Retrofit retrofit = new Retrofit.Builder()
通过构建者模式构建出retrofit对象 在这里面也可以指定他的平台是安卓还是ios
.baseUrl(ENDPOINT)
baseurl里面也是经过了httpurl的解析 规定了baseurl的末尾必须是以斜杠结束 后续的Api不能以斜杠开头
.addConverterFactory(GsonConverterFactory.create())
.build();
创建这个apiservice对象是通过代理的模式 因为代理模式的只能针对接口创建代理类
所以在create的时候先判断传进来的是不是一个接口 不是就抛出异常
他里面有一个invoke方法 这个方法是InvocationHandler中的唯一的一个方法
他会将对方法的调用指派到invoke方法中进行处理
method是一个对象的metod时会吧方法加载到ServiceMethod中 这里用了缓存 如果缓存中有就直接用如果没有的话就new出来
ServiceMethod 初始化了一个OkHttpCall对象 最后通过calladapter 的adapter方法返回了一个代理Call的实例
ApiService apiService = retrofit.create(ApiService.class);
mProgressBar.setVisibility(View.VISIBLE);
Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");
call.enqueue(new Callback<GetIpInfoResponse>() {
@Override
public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
mProgressBar.setVisibility(View.GONE);
GetIpInfoResponse getIpInfoResponse
9255
= response.body();
mTvContent.setText(getIpInfoResponse.data.country);
}
@Override
public void onFailure(Throwable t) {
mProgressBar.setVisibility(View.GONE);
mTvContent.setText(t.getMessage());
}
});
}
});
相关文章推荐
- Retrofit2源码分析
- [Android] Retrofit 源码分析之 ServiceMethod 对象
- Retrofit 源码分析
- Retrofit2 源码分析
- retrofit2源码分析
- 简略分析Android的Retrofit应用开发框架源码
- 【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的
- Retrofit源码分析
- Retrofit2.0源码分析
- Retrofit 2.0源码分析
- Retrofit源码分析
- Retrofit2 源码分析
- Retrofit源码简要分析
- Retrofit源码分析以及MVP框架封装使用
- 【Android实战】----Android Retrofit是怎么将回调函数放到UI线程(主线程)中的(源码分析)
- [Android] Retrofit 源码分析之 Retrofit 对象
- Retrofit源码分析以及MVP框架封装使用
- Retrofit源码分析
- Retrofit源码分析
- retrofit2源码分析