Retrofit 2.0使用详解,配合OkHttp、Gson,Android最强网络请求框架
2015-11-06 17:20
1161 查看
Retrofit终于迎来了2.0版本,也修复了老版本的一些bug,这是修复日志,各位可以自己去看看,https://github.com/square/retrofit/blob/master/CHANGELOG.md
注:【转载请注明出处啊】
retrofit 官网地址:http://square.github.io/retrofit/
okHttp gitHub项目地址:https://github.com/square/okhttp
okHttp 官网地址:http://square.github.io/okhttp/
okio gitHub项目地址:https://github.com/square/okio
其实还需要以下jar包
1.gson的jar包 gson-2.4.jar
2.解析gson的转化jar包 onverter-gson-2.0.0-beta2_.jar
3.okhttp-urlconnection-2.5.0.jar
4.httpmime-4.5.jar
只需要Retrofit包和gson-2.4.jar包就行了,那时的Retrofit默认是使用okhttp jar包来网络请求的,没有的话就使用自己所带的网络请求,解析默认是gson解析的,所以我们需要添加gson包。但是如果你要使用okhttp来请求的话,必须要添加okhttp-2.5.0.jar、okio-1.6.0.jar、okhttp-urlconnection-2.5.0.jar这三个包。
(1) okhttp-2.5.0.jar:okhttp主要的网络请求代码都在里面
(2) okio-1.6.0.jar:okhttp 所需要的依赖包
(3) okhttp-urlconnection-2.5.0.jar:连接okhttp和retrofit的桥梁,但是在retrofit2.0后,可以不添加这个包,也可以使用okhttp请求了。
在2.0版本的retrofit框架:
我现在所用的是retrofit-2.0.0-beta2.jar ,目前的最新版本。发现retrofit改变的挺大。
(1)retrofit必须使用okhttp请求了,如果项目中没有okhttp的依赖的话,肯定会出错
(2)请求返回的解析不是默认的Gson解析了,需要我们手动去指定。
这个就是Gson解析了,GsonConverterFactory是需要下载的jar。这是官方原话:
加上converter-gson-2.0.0-beta2_.jar包之后,还是需要gson-2.4.jar这个包的,没有的话还是解析不了的
(3)okhttp-urlconnection-2.5.0.jar,我发现在retrofit2.0之后不加也是可以的,但是奇怪的是square公司还是一直在更新这个jar(最新是2015.09)。httpmime-4.5.jar是Apache公司的,用来加快网络请求效率的,搜了网上的一些文章,说这2个jar是用来让网络更快的,我水平有限,深入不了retrofit和okhttp的源码理解,各位加上还是不加都是可以请求的,随意啦~
以前是:
现在是:
2.0中retrofit的请求拦截类被删除了,现在直接用的okhttp的请求拦截类
(2)删除ErrorHandler接口和RetrofitError类
没有错误的提示了,同意集中在 callback的onFailure(Throwable throwable)的异常错误中了。
2.0现在是:
这篇文章写的比较好,可以参考一下。
就单独的来说,OkHttp的网络请求也是很好用的,推荐文章鸿神的/article/1580244.html
可惜单独的Retrofit不能网络请求了,感觉这是2.0最不爽的地方了。当然组合使用应该是更爽的吧。
所有最新依赖包下载:http://download.csdn.net/detail/u012301841/9248139
demo示例下载:http://download.csdn.net/detail/u012301841/9248155
注:【转载请注明出处啊】
1.使用retrofit,需要下载一些jar包
retrofit gitHub项目地址:https://github.com/square/retrofitretrofit 官网地址:http://square.github.io/retrofit/
okHttp gitHub项目地址:https://github.com/square/okhttp
okHttp 官网地址:http://square.github.io/okhttp/
okio gitHub项目地址:https://github.com/square/okio
其实还需要以下jar包
1.gson的jar包 gson-2.4.jar
2.解析gson的转化jar包 onverter-gson-2.0.0-beta2_.jar
3.okhttp-urlconnection-2.5.0.jar
4.httpmime-4.5.jar
2.介绍这些jar包的作用
在1.x版本的retrofit框架:只需要Retrofit包和gson-2.4.jar包就行了,那时的Retrofit默认是使用okhttp jar包来网络请求的,没有的话就使用自己所带的网络请求,解析默认是gson解析的,所以我们需要添加gson包。但是如果你要使用okhttp来请求的话,必须要添加okhttp-2.5.0.jar、okio-1.6.0.jar、okhttp-urlconnection-2.5.0.jar这三个包。
(1) okhttp-2.5.0.jar:okhttp主要的网络请求代码都在里面
(2) okio-1.6.0.jar:okhttp 所需要的依赖包
(3) okhttp-urlconnection-2.5.0.jar:连接okhttp和retrofit的桥梁,但是在retrofit2.0后,可以不添加这个包,也可以使用okhttp请求了。
在2.0版本的retrofit框架:
我现在所用的是retrofit-2.0.0-beta2.jar ,目前的最新版本。发现retrofit改变的挺大。
(1)retrofit必须使用okhttp请求了,如果项目中没有okhttp的依赖的话,肯定会出错
(2)请求返回的解析不是默认的Gson解析了,需要我们手动去指定。
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://apis.baidu.com/showapi_open_bus/showapi_joke/") .addConverterFactory(GsonConverterFactory.create()) .build();
这个就是Gson解析了,GsonConverterFactory是需要下载的jar。这是官方原话:
加上converter-gson-2.0.0-beta2_.jar包之后,还是需要gson-2.4.jar这个包的,没有的话还是解析不了的
(3)okhttp-urlconnection-2.5.0.jar,我发现在retrofit2.0之后不加也是可以的,但是奇怪的是square公司还是一直在更新这个jar(最新是2015.09)。httpmime-4.5.jar是Apache公司的,用来加快网络请求效率的,搜了网上的一些文章,说这2个jar是用来让网络更快的,我水平有限,深入不了retrofit和okhttp的源码理解,各位加上还是不加都是可以请求的,随意啦~
3.Retrofit的请求
还是和以前一样,通过接口的映射来请求,但是更改了一些请求方式。以前是:
RestAdapter retrofit = new RestAdapter.Builder() .setEndpoint(请求地址) .setLogLevel(LogLevel.FULL) // .setConverter(new GsonConverter(new Gson())) // .setClient(new OkClient(new OkHttpClient())) // .setErrorHandler(new RetrofitErrorHandler()) // .setRequestInterceptor(requestInterceptor) .build(); GitHubService service = retrofit.create(GitHubService.class); 返回实体 result = service.请求的接口名称(请求参数);
现在是:
Retrofit retrofit = new Retrofit.Builder() .baseUrl(请求地址) .addConverterFactory(GsonConverterFactory.create()) .build(); GitHubService service = retrofit.create(GitHubService.class); retrofit.Call<返回实体> repos = service.请求的接口名称(请求参数); repos.enqueue(new retrofit.Callback<返回实体>() { @Override public void onResponse(retrofit.Response<返回实体> response, Retrofit retrofit) { 返回实体 body = response.body(); LogUtil.i(TAG, body.toString()); } @Override public void onFailure(Throwable throwable) { // TODO Auto-generated method stub } });
4.删除一些类
(1)RequestInterceptor类2.0中retrofit的请求拦截类被删除了,现在直接用的okhttp的请求拦截类
OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response response = chain.proceed(chain.request()); // Do anything with response here return response; } }); // 然后传递创建的client到Retrofit的Builder链中。 Retrofit retrofit = new Retrofit.Builder() .baseUrl(请求地址) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
(2)删除ErrorHandler接口和RetrofitError类
没有错误的提示了,同意集中在 callback的onFailure(Throwable throwable)的异常错误中了。
5.同步请求和异步请求方式改变
以前是://在接口映射中 public interface GitHubService{ //同步请求 @POST("joke_text") 返回实体 请求接口名称(请求参数); //异步请求 @POST("joke_text") void 请求接口名称(Callback<返回实体> cb); }
2.0现在是:
// 同步请求 Call<返回实体> call = service.请求接口名称(); 返回实体 repo = call.execute(); // 异步请求 Call<返回实体> call = service.请求接口名称(); call.enqueue(new Callback<返回实体>() { @Override public void onResponse(Response<返回实体> response, Retrofit retrofit) { // Get result bean from response.body() } @Override public void onFailure(Throwable t) { } });
6.Url的重新定义
这个里面的介绍比较详细 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0915/3460.html这篇文章写的比较好,可以参考一下。
7.总结
搞了这么多,终于可以使用retrofit+okhttp+gson超级网络请求框架了,网上说目前这个是最快的网络请求,比google的volley还快点,至于真假,就不知道了,但是不可否认,确实挺好用的,效率也是杠杠的。就单独的来说,OkHttp的网络请求也是很好用的,推荐文章鸿神的/article/1580244.html
可惜单独的Retrofit不能网络请求了,感觉这是2.0最不爽的地方了。当然组合使用应该是更爽的吧。
所有最新依赖包下载:http://download.csdn.net/detail/u012301841/9248139
demo示例下载:http://download.csdn.net/detail/u012301841/9248155
相关文章推荐
- httpclient中文乱码问题
- DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络
- 网络请求参数为json形式
- Android上用tcpdump抓包(转)
- 一文读懂卷积神经网络
- HTTP中Get与Post的区别
- UNIX网络编程(卷I)环境搭建
- 面试可能遇到这样的问题 TCP HTTP SOCKET之间的有什么关系
- Android开发&Http协议及数据解析
- 深度学习笔记(五)用Torch实现RNN来制作一个神经网络计时器
- HTTP协议及请求/响应模型
- Linux之使用网络
- Linux之使用网络
- ngx_http_rewrite_module
- 本人SAP博客主要在新浪维护:http://blog.sina.com.cn/sapliumeng
- SSL延迟计算:为什么HTTPs比HTTP要慢?
- The method getDispatcherType() is undefined for the type HttpServletRequest解决办法
- HttpClient使用笔记
- 谷歌热气球4G网络将开始商用 偏僻地区人能上网
- 操作系统与网络实现 之三