Android Retrofit 2.0
来源:互联网 发布:多伦多大学教育学 知乎 编辑:程序博客网 时间:2024/06/16 00:53
一、概述
Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库。来自官网的介绍:
A type-safe HTTP client for Android and Java
- Rest API是一种软件设计风格,服务器作为资源存放地。客户端去请求GET,PUT, POST,DELETE资源。并且是无状态的,没有session的参与。关于REST的介绍可以参考维基百科
- retrofit模型如下:(来自如何使用Retrofit写一个Android的REST客户端的小教程)retrofit模型
1) POJO或模型实体类 : 从服务器获取的JSON数据将被填充到这种类的实例中。
2) 接口 : 我们需要创建一个接口来管理像GET,POST...等请求的URL,这是一个服务类。
3) RestAdapter类 : 这是一个REST客户端(RestClient)类,retrofit中默认用的是Gson来解析JSON数据,你也可以设置自己的JSON解析器。
二、原理
在发起请求时,整个框架主要通过Call来封装每一次的请求。
调用同步方法时,会使用应用线程来发送请求;
调用异步方法时会通过 OkHttp 的 Dispatcher 提供的线程来执行请求。
Dispatcher:Dispatcher内部实现了懒加载无边界限制的线程池方式,同时该线程池采用了SynchronousQueue这种阻塞队列。SynchronousQueue每个插入操作必须等待另一个线程的移除操作,同样任何一个移除操作都等待另一个线程的插入操作。显然这是一种快速传递元素的方式,也就是说在这种情况下元素总是以最快的方式从插入者(生产者)传递给移除者(消费者),这在多任务队列中是最快处理任务的方式。
二、使用
- 添加依赖(gradle)或导jar包
添加依赖
在modul的build文件下的dependencies中添加
点击Sync Nowcompile 'com.squareup.retrofit2:retrofit:2.0.2'compile 'com.squareup.retrofit2:converter-gson:2.0.2'
(或)导jar包,点击下载
retrofit-2.0.0-beta2.jar| Retrofit库
converter-gson-2.0.0-beta2_.jar | Gson解析库
gson-2.4.jar | Gson解析库
okhttp-2.5.0.jar | Okhttp请求库
okio-1.6.0.jar | Okhttp请求库
说明:
Retrofit依赖于okhttp,所以需要集成okhttp
API返回的数据为JSON格式,在此我使用的是Gson对返回数据解析 - 添加权限
由于是网络请求,需要在manifest中添加网络请求的权限<uses-permission android:name="android.permission.INTERNET"/>
- 创建实体类
这是使用Gson解析,需要创建一个POJO(Java对象)。服务器返回的JSON数据不能在Java里直接使用,所以我们需要用模型类来做转换。这里使用jsonschema2pojo(需翻墙)来创建POJO。
得到JSON数据如下:JSON数据
复制JSON字符串到输入框中,填写报名、类名,源代码类型选择JSON,注解类型选择Gson,点击Preview即可得到对应的POJO,如下图复制到jsonschema2pojo中
点击preview,得到对应的实体类。将其拷贝到自己的工程中即可。得到的实体类import com.google.gson.annotations.SerializedName;
@Generated("org.jsonschema2pojo")
可删除 - 创建一个Retrofit 对象(核心用法一)
Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create())//解析方法 //这里建议:- Base URL: 总是以/结尾;- @Url: 不要以/开头 .baseUrl("http://www.wangyinews.com.cn/") .build();
- 接口申明(核心用法二)
若需要重新定义接口地址可以使用@Url,例:public interface NewsService { /** * 根据newsid获取对应的资讯数据 * 如果不需要转换成Json数据,可以用了ResponseBody; * @param newsId * @return call */ @GET("News/{newsId}") Call<News> getNews(@Path("newsId") String newsId);}
@GET Call<List<CaigenActivitySubjectsBean>> getActivitySubjectsList( @Url String url, @QueryMap Map<String, String> map);
更多请求方法请参考:Retrofit网络请求Service,@Path、@Query、@QueryMap
- 创建访问API的请求(核心用法三)
NewsService api = retrofit.create(NewsService .class);Call<News> call = service.getNews("123456");
- 同步调用(核心用法四)
News news = call.execute();
- 异步调用(核心用法五)
call.enqueue(new Callback<News>(){ @Override public void onResponse(Response<News> response) { //成功返回数据后在这里处理,使用response.body();获取得到的结果 News news = response.body(); } @Override public voidonFailure(Throwable t) { //请求失败在这里处理 } });
- 取消请求(核心用法六)
完成以上步骤就可以实现一个简单的网络请求了。call.cancel();
Tips:
当返回结果错误,调用response.errorBody().string();可以得到String类型的请求结果,但再次调用response.errorBody().string();得到的结果为""。具体原因不明
原文链接:http://www.jianshu.com/p/7efdc3477269
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- Android Retrofit 2.0
- Android Retrofit 2.0使用
- Android Retrofit 2.0使用
- Android-->Retrofit 2.0 beta2 使用方法
- Android-->Retrofit 2.0 beta2 使用方法
- Android Retrofit 2.0 配置OkHttpClient
- 【Android】Retrofit 2.0 的使用
- Android Retrofit 2.0的基本使用
- Framework of Android: retrofit (2.0)
- Android Retrofit 2.0框架上传图片解决方案
- android Retrofit 2.0网络请求库
- Android Retrofit 2.0自定义Converter(JSONObject Converter)
- Android框架Retrofit 2.0学习笔记
- Retrofit 2.0,RxJava(Android), OkHttp3.3
- Android Retrofit 2.0 使用-补充篇
- Android Retrofit 2.0 使用-补充篇
- Android Retrofit 2.0 使用-补充篇
- Android Retrofit 2.0的基本使用
- 博途v13中多重背景的建立
- @EnableAsync annotation metadata was not injected s
- ViewPager实现页卡的最新方法--简洁的TabLayout(谷歌支持包)
- HTTPS和HTTP的概念和区别
- Docker
- Android Retrofit 2.0
- [Switch] VLAN-TAG超经典解释_有种豁然开朗的感觉
- Myeclips 自动补全功能失效
- Android 属性动画左右移动
- android程序中给我评分的功能
- 二维码初解
- 关于APP自动化安装(初探)
- linux安装skynet总结
- Android double保留两位小数:截取 和 四舍五入