博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】Retrofit 2.0 的使用
阅读量:6612 次
发布时间:2019-06-24

本文共 2917 字,大约阅读时间需要 9 分钟。

一、概述

Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库。来自的介绍:

A type-safe 
HTTP client for Android and Java
  • Rest API是一种软件设计风格,服务器作为资源存放地。客户端去请求GET,PUT, POST,DELETE资源。并且是无状态的,没有session的参与。关于REST的介绍可以参考
  • retrofit模型如下:(来自)

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.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中添加网络请求的权限

创建实体类

这是使用Gson解析,需要创建一个POJO(Java对象)。服务器返回的JSON数据不能在Java里直接使用,所以我们需要用模型类来做转换。这里使用(需翻墙)来创建POJO。

得到JSON数据如下:
JSON数据
复制JSON字符串到输入框中,填写报名、类名,源代码类型选择JSON,注解类型选择Gson,点击Preview即可得到对应的POJO,如下图
复制到jsonschema2pojo中
点击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
getNews(@Path("newsId") String newsId);}

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

@GET    Call
> getActivitySubjectsList( @Url String url, @QueryMap Map
map);
更多请求方法请参考:
  • 创建访问API的请求(核心用法三)
NewsService api = retrofit.create(NewsService .class);Call
call = service.getNews("123456");

同步调用(核心用法四)

News news = call.execute();

异步调用(核心用法五)

call.enqueue(new Callback
(){             @Override             public void onResponse(Response
 response) {                 //成功返回数据后在这里处理,使用response.body();获取得到的结果 News news = response.body();            }              @Override              public voidonFailure(Throwable t) {                 //请求失败在这里处理             }         });  

取消请求(核心用法六)

call.cancel();  

完成以上步骤就可以实现一个简单的网络请求了。

Tips:
当返回结果错误,调用response.errorBody().string();可以得到String类型的请求结果,但再次调用response.errorBody().string();得到的结果为""。具体原因不明

转载地址:http://teaso.baihongyu.com/

你可能感兴趣的文章
脚本安装denyhosts
查看>>
Struts2中javascrpit实现form的提交二
查看>>
Linux下常用的磁盘管理技术LVM
查看>>
Silverlight杂记之HTTP通信WebClient介绍
查看>>
动态路由协议之RIP配置详解
查看>>
(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式
查看>>
nginx1.9+做TCP代理(端口转发)
查看>>
Windows 2012 计划任务发送邮件
查看>>
烛光下的年夜饭
查看>>
Samba服务介绍及配置
查看>>
Android系统的开机画面显示过程分析(5)
查看>>
DataGrid Web Control 连载之四
查看>>
在Windows Server 2008上实现带宽控制---QoS
查看>>
WSUS3.0体验之一安装
查看>>
RIP路由协议及工作原理
查看>>
Oracle SQL开发学习笔记
查看>>
用经验诠释Access、Trunk和Hybird端口数据收发规则
查看>>
Web Client Software Factory系列(1):初识与预备知识
查看>>
研华物联网论坛和ARM技术研讨会随笔
查看>>
Linux平台下使用AdventNet ManageEngine OpUtils监控网络
查看>>