一、概述

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中添加
    compile 'com.squareup.retrofit2:retrofit:2.2.0'
    compile 'com.squareup.retrofit2:converter-gson:2.2.0'
      • 点击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字符串到输入框中,填写报名、类名,源代码类型选择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();
      • 接口申明(核心用法二)
      •  public interface NewsService {
        /**
        * 根据newsid获取对应的资讯数据
        * 如果不需要转换成Json数据,可以用了ResponseBody;
        * @param newsId
        * @return call
        */
        @GET("News/{newsId}")
        Call<News> getNews(@Path("newsId") String newsId);
        }

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

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

【Android】Retrofit 2.0 的使用的更多相关文章

  1. Android Retrofit 2.0 使用-补充篇

    推荐阅读,猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava 4.RxBus 5.Android MVP+Retrofit+RxJava实践小 ...

  2. android -------- Retrofit + RxJava2.0 + Kotlin + MVP 开发的 WanAndroid 项目

    简介 wanandroid项目基于 Retrofit + RxJava2.0 + Kotlin + MVP 用到的依赖 implementation 'io.reactivex.rxjava2:rxj ...

  3. Android Retrofit 2.0使用

    实例带你了解Retrofit 2.0的使用,分享目前开发Retrofit遇到的坑和心得. 添加依赖 app/build.gradle 1 compile 'com.squareup.retrofit2 ...

  4. Android Retrofit 2.0文件上传

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

  5. Android - Retrofit 2.0 使用教程(含实例讲解)

    链接:https://blog.csdn.net/carson_ho/article/details/73732076

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

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

  7. Retrofit 2.0 超能实践(四),完成大文件断点下载

    作者:码小白 文/CSDN 博客 本文出自:http://blog.csdn.net/sk719887916/article/details/51988507 码小白 通过前几篇系统的介绍和综合运用, ...

  8. Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串

    文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...

  9. Retrofit 2.0 超能实践(一),okHttp完美支持Https传输

    http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...

  10. Retrofit 2.0 超能实践,完美支持Https传输

    http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...

随机推荐

  1. 【learning】微信跳一跳辅助c++详解 轻松上万 【下】

    如果你还没有看完本blog的上篇,建议您先看完上篇!! 第一代辅助如何死的? 我们先来看四张图      如上方最左图所示,前面是一个小圆柱子,看起来很人畜无害似不似?? 由于上一步跳出了偏差,并没有 ...

  2. 数据结构---平衡查找树之B树和B+树(转)

    本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 前面讲解了平衡查找树中的2-3树以及其实现红 ...

  3. AngularJS自定义Directive

    (编辑完这篇之后,发现本篇内容应该属于AngularJS的进阶,内容有点多,有几个例子偷懒直接用了官方的Demo稍加了一些注释,敬请见谅). 前面一篇介绍了各种常用的AngularJS内建的Direc ...

  4. 微信小程序开发笔记2,底部导航栏tablebar

    底部导航(要在app.js里面配置,也就是把导航的代码写到app.js) 官方文档说最少2个导航最多5个 , "tabBar": { "color": &quo ...

  5. java多线程_01_线程的基本概念

    线程:一个程序里边不同的执行路径 例子程序:这个例子程序是一条执行路径.这个程序只有一个分支,就是main方法,叫主线程 public static void main(String[] args) ...

  6. 一分钟让你学会使用Android AsyncTask

    AsyncTask相信大多数朋友对它的用法都已经非常熟悉,这里记录一下主要是献给那些刚刚接触的Android 或者AsyncTask的同学们,高手请绕道. AsyncTask类是Android1.5版 ...

  7. JavaScript -- 猜数、遍历

    ----- 004-猜数.html ----- <!DOCTYPE html> <html> <head> <meta http-equiv="Co ...

  8. 《垃圾回收的算法与实现》——GC标记-压缩算法

    基本算法 Mark-Compact与Mark-Sweep的第一阶段均为标记活跃对象,第二阶段则不同,压缩算法则是将活跃对象逻辑上移到一起. Lisp2算法 对象头中增加forwarding指针,其用法 ...

  9. centos6.7 安装 virtualBox 再安装 centos 7

    Tag: 黄色为自己实际情况需要设置的部分,绿色部分为虚拟机名称(自定义) 1.创建虚拟机VBoxManage createvm --name centos7 --ostype Linux26_64 ...

  10. CVPR2019 | Libra R-CNN 论文解读

    作者 | 文永亮 学校 | 哈尔滨工业大学(深圳) 研究方向 | 目标检测.GAN 推荐理由 ​ 这是一篇发表于CVPR2019的paper,是浙江大学和香港中文大学的工作,这篇文章十分有趣,网友戏称 ...