一、概述

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客户端的小教程)


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中添加

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'

点击Sync Now
(或)导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,注解类型选择Gson,点击Preview即可得到对应的POJO,如下图

点击preview,得到对应的实体类。将其拷贝到自己的工程中即可。

import com.google.gson.annotations.SerializedName;
@Generated("org.jsonschema2pojo")
可删除

POJO的转换推荐使用GsonFormat,用法不就不说了,自己去搜吧。简单易用

创建一个Retrofit 对象(核心用法一)

Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())//解析方法//这里建议:- Base URL: 总是以/结尾;- @Url: 不要以/开头.baseUrl("http://www.wangyinews.com.cn/").build();

接口申明(核心用法二)

public interface NewsService {/*** 根据newsid获取对应的资讯数据* 如果不需要转换成Json数据,可以用了ResponseBody;* @param newsId* @return call*/@GET("News/{newsId}")Call<News> getNews(@Path("newsId") String newsId);
}

若需要重新定义接口地址可以使用@Url,例:

    @GETCall<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();得到的结果为""。具体原因不明

【Android】Retrofit 2.0 的使用相关推荐

  1. Android Retrofit 2.0(三)从源码分析原理

    Retrofit·特点 性能最好,处理最快 使用REST API时非常方便: 传输层默认就使用OkHttp: 支持NIO: 拥有出色的API文档和社区支持 速度上比volley更快: 如果你的应用程序 ...

  2. android retrofit 2.0公共参数,Android Retrofit 2.0 使用-补充篇

    之前分享的Android Retrofit 2.0 使用,属于基本的使用,实际开发还远远不够,因此对其补充,主要在Retrofit配置和接口参数. Retrofit配置 添加依赖 app/build. ...

  3. Android Retrofit 2.0文件上传

    Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传 使用Retrofit进行文件上传,肯定离不开Part & PartMap. public interface ...

  4. Android Retrofit 2.0使用——转载吴小龙同学http://wuxiaolong.me/2016/01/15/retrofit/

    这几天学习Retrofit 看到一篇非常好的文章如下: 原网址为:http://wuxiaolong.me/2016/01/15/retrofit/感谢吴小龙同学的默默奉献. 实例带你了解Retrof ...

  5. android retrofit 2.0,android – Retrofit 2.0 OnFailure – 原始响应

    我正在使用改造来调用Web服务并且改造失败,来自'Throwable`的消息给了我 java.lang.IllegalStateException: Expected BEGIN_OBJECT but ...

  6. android retrofit 2.0公共参数,Retrofit2.0 添加公共参数

    //这里可以添加公共参数 Interceptor addQueryParameterInterceptor = new Interceptor() { @Override public Respons ...

  7. Android:手把手带你深入剖析 Retrofit 2.0 源码

    前言 在Andrroid开发中,网络请求十分常用 而在Android网络请求库中,Retrofit是当下最热的一个网络请求库 今天,我将手把手带你深入剖析Retrofit v2.0的源码,希望你们会喜 ...

  8. Android Retrofit详解(retrofit:2.3.0)

    目录 1.Retrofit是什么? 2.Retrofit如何使用? 2.1创建HTTP请求的API接口 2.2请求执行 3.注解详情 3.1请求方法注解 3.2标记请求数据类型 3.3注解参数 4.G ...

  9. android 三剑客(Retrofit 2.0)简单使用

    Retrofit是SQUARE美国一家移动支付公司最近新发布的在Android平台上http访问的开源项目 官方标语:A type-safe HTTP client for Android and J ...

最新文章

  1. flexcan controller register
  2. java 让进度条动起来_自定义进度条动起来
  3. Nginx RTMP 功能研究
  4. matlab 定义一个有自变量的方程_Eviews、Stata、Python、Matlab、R描述+相关+回归分析教程汇总...
  5. Win10系统电脑不会一键还原系统怎么解决
  6. 基础知识—循环语句-循环控制
  7. 全网最全的IDEA热部署方案,看完弄懂,再也不用加班了~
  8. MNIST 数据集下载及图片可视化
  9. 基于 Visual Studio 2019的 OpenGL的安装和环境配置
  10. JavaScript学习手册四:JS对象
  11. 蜂鸣器驱动电路中二极管的作用
  12. 数学------为什么“负负得正”
  13. linux下hwclock及clock命令详解
  14. Linux系统引导过程及排除启动故障
  15. 北京金普蝶:让客户满意就是最好的营销!
  16. Features 和 Selections
  17. 测试开发工作者日记:2020.6.28
  18. vue-pdf遇到的问题
  19. “螺蛳粉宇宙中心”柳州,看网红速食如何实现长红?
  20. 阿里云消息服务(Message Service)-基本概念

热门文章

  1. NodeJs初学者经典入门解析
  2. php邮件发送失败,php服务器发送邮件失败问题解析
  3. 步进电机正反转实验_电工基础:帮你学会电机正反转双重互锁控制
  4. docker ubuntu镜像_docker使用教程
  5. uniapp - easycom模式(自动引入组件)
  6. 拉格朗日乘子法 学习笔记
  7. JS 正则匹配字符串
  8. java语法基础(总结)
  9. SQL中变量的赋值-select
  10. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别