Retrofit学习一:文档介绍

SVN 代码提交:从基础到高级的全面指南 SVN代码提交步骤指南:1)使用svn update更新工作副本;2)通过svn add添加新文件;3)用svn commit -m提交更改并添加描述信息。建议提交前测试所有更改,保持提交内容有意义。可使用svn status查看修改状态。这些是SVN命令行工具的基本操作流程。 阅读详情

Retrofit

官方文档:http://square.github.io/retrofit/

源码和例子,Github地址:https://github.com/square/retrofit

一个Android和Java的的类型安全的HTTP客户端。

介绍

Retrofit将网络请求API转换为一个Java 接口。

public interface MovieService {
    @GET("top250")
    Call<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count);
}

Retrofit生成一个MovieService的接口实现。

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.douban.com/v2/movie/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

MovieService movieService = retrofit.create(MovieService.class);

MovieService可以创建一个同步或者异步的远程服务器请求:Call。

Call<MovieEntity> topMovie = movieService.getTopMovie(0, 1);

使用注解来描述HTTP请求:

  • 支持URL参数替换和查询。
  • 将对象转化为一个Request Body(例如:JSON、协议缓冲区)。
  • 多部分Request Body和文件上传。

API介绍

为接口的方法添加注解,其参数指明这个请求如何操作。

请求方法

每个方法必须含有HTTP注解(请求方法和相对URL地址)。有5个内置的注解:GET, POST, PUT, DELETE, and HEAD。相对URL地址在注解中指定。

@GET("top250")

同样,可以在URL上指定查询参数。

@GET("users/list?sort=desc")

URL操作

一个请求的URL可以使用替换块和参数来进行URL的动态的替换。替换块的格式:{字符串}。需要替换的部分需要使用相同的字符串和@Path注解。

@GET("{type}250")
Call<MovieEntity> getTopMovie(@Path("type") String type,@Query("start") int start, @Query("count") int count);

同样可以添加查询参数

@GET("top250")
Call<MovieEntity> getTopMovie(@Query("start") int start, @Query("count") int count);

对于复杂的查询参数组合,可以使用Map集合。

@GET("{type}250")
Call<MovieEntity> getTopMovie(@Path("type") String type,@QueryMap Map<String,Integer> options);

Map<String,Integer> options = new HashMap<>();
options.put("start",1);
options.put("count",2);
Call<MovieEntity> topMovie = movieService.getTopMovie("top",options);

请求主体

使用@Body可以将一个对象作为HTTP的请求主体。

@POST("users/new")
Call<User> createUser(@Body User user);

指定的对象将使用”Retrofit”指定的转换器进行转换。如果没有添加转换器,就只可以使用RequestBody。

FORM ENCODED 和 MULTIPART

方法同样可以声明表单编码和复合数据。

表单编码数据发送当存在@FormUrlEncoded注解。每个键值对的key为@Filed的部分,Value为Object。

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

使用@Multipart来实现Multipart的请求。使用@Part注解来声明内容。

@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

Multipart parts使用Retrofit的转换器,或者实现RequestBody。

请求头操作

使用@Headers来设置请求头。

@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();

多个

@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

注意:相同名字的请求头不会覆盖,而是都包含在请求头中。

一个请求头使用@Header注释可以动态更新。@Header必须提供相应的参数。如果该值为null,头就会被忽略掉。另外,valeu会进行toString。

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

如果请求头需要应用在每个请求上,请使用’OkHttp interceptor’

同步和异步

每个Call实例可以执行同步或者异步请求。每个实例只能使用一次,但是可以使用clone()方法创建一个新的实例来操作。

在Android中,callback会在UI线程中执行,在JVM上,callback会在请求执行的线程上执行。

Retrofit的配置

Retrofit是一个将HTTP的API接口转化为可被调用的对象的类。默认的,Retrofit提供默认的配置,当然,你可以自定义。

转换器

默认情况下,Retrofit只能反序列化HTTP的主体到okhttp的ResponseBody,并且@Body注解只能接收RequestBody的类型数据。

转换器可以被添加来支持其它类型。下面是6个流行的序列化库来方便操作。

*   Gson: com.squareup.retrofit2:converter-gson
*   Jackson: com.squareup.retrofit2:converter-jackson
*   Moshi: com.squareup.retrofit2:converter-moshi
*   Protobuf: com.squareup.retrofit2:converter-protobuf
*   Wire: com.squareup.retrofit2:converter-wire
*   Simple XML: com.squareup.retrofit2:converter-simplexml

*   Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

例子:生成一个使用Gson反序列的API接口实现类,通过GsonConverterFactory转换器。

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

自定义转换器

Create a class that extends the Converter.Factory class and pass in an instance when building your adapter.

混淆器

-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
retrofit2 官方文档学习 app+java server 立即下载

相关推荐

Zabbix 简介、优缺点、基础原理

(8条消息) Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型Zabbix 的基础概念、原理和架构_Lee木木的博客-优快云博客_zabbix架构类型 --------------------------------------------------------------------------------------------------------------------------- 一、Zabbix 简介 Zabbix是由A...

weixin_50196615的博客 2037

Retrofit官方使用文档

介绍 Retrofit 将你的HTTP API转化为一个Java接口 public interface GitHubService { @GET("users/{user}/repos") Call&lt;List&lt;Repo&gt;&gt; listRepos(@Path("user") String user); } Retrofit 类会生成GitHubService接口的实现...

hober的专栏 1551

智能车八邻域图像算法

智能车八邻域图像算法

技术缝合怪的博客 4万+

Retrofit2使用中文文档

介绍将HTTP API转换为Java接口public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); }Retrofit创建GitHubService接口的实例对象Retrofit retrofit = new Retrofi

小男孩 1686

多思计算机组成原理实验:模型机课程设计

计算机组成原理实验教程 基于多思网络虚拟实验系统 张雯雰

Nick的博客 2万+

导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017

PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...

weixin_31304817的博客 1914

Retrofit 官方文档翻译

介绍Retrofit 把 HTTP API 转成 a Java (接口)interface.public interface GitHubService { @GET("users/{user}/repos") Call&lt;List&lt;Repo&gt;&gt; listRepos(@Path("user") String user); }The Retrofit class 生成一...

jack22001的博客 440

Windows 11/10系统盘被BitLocker锁了别慌!手把手教你用manage-bde命令找回密钥并解锁

本文详细介绍了当Windows 11/10系统盘被BitLocker锁定后的恢复方法,重点讲解了如何使用manage-bde命令行工具找回密钥并解锁加密驱动器。通过进入Windows恢复环境、诊断锁定状态、提取恢复密钥ID以及执行解锁操作等步骤,帮助用户有效解决BitLocker锁定问题,同时提供了后续防护优化建议和高级故障排除技巧。

weixin_42542669的博客 1461

Retrofit2使用手册-基础一

最近一直在看一些框架,开始慢慢了解到Retrofit,查了好多资料,也看了官网的资料。最后发现,框架并不是很复杂,主要是资料太零散,而且大部分都是写给高手看的,光点题,无实例。我还是决定自己写一下,一个菜鸟的心得体会。 这篇我先写一个最最最简单的(这里面会有接口,会有泛型,会有Gson Format生成的类) 首先我来说一下,这个项目需要做些什么 我有一个网址:http://clou

Tyrant的博客 900

《从0到1:CTFer成长之路》书籍配套题目-[第二章 web进阶]文件上传

[第二章 web进阶]文件上传开始行动绕过第1个限制绕过第2个限制 介绍:记录一下笔记,方便以后迅速回忆使用。 《从0到1:CTFer成长之路》书籍配套题目,来源网站:《从0到1:CTFer成长之路》 先看一下题目源码: <?php header("Content-Type:text/html; charset=utf-8"); // 每5分钟会清除一次目录下上传的文件 require_once('pclzip.lib.php'); if(!$_FILES){ echo '

weixin_46703850的博客 3411

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战

本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。

2201_76125261的博客 1189

Retrofit源码学习一:Retrofit介绍

目录 系列文章: 简介和流程: 使用: 添加依赖: 代码体现: 总结: 系列文章: Retrofit源码学习一:Retrofit介绍 Retrofit源码学习二:代理模式 Retrofit源码学习三:Retrofit源码详解一 Retrofit源码学习四:Retrofit源码详解二 Retrofit源码学习五:Retrofit中同步、异步请求解析 Retrofit源码学习...

songzi1228的博客 1477

深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践

在异构计算领域,Zynq-7000系列SoC的AMP(Asymmetric Multiprocessing)模式堪称多核编程的瑞士军刀。独立运行环境:CPU0运行Linux,CPU1运行FreeRTOS或裸机程序硬件资源独占:CPU0管理DDR,CPU1使用OCM(片上内存)中断隔离:默认所有中断路由到CPU0这种架构非常适合需要实时响应的工业控制系统——比如用CPU0处理网络通信,CPU1负责电机控制。AMP模式下中断路由的底层原理多维度性能优化技巧工业级可靠性的实现方案。

QQ_778132974的博客 492

Android 网络开源库-Retrofit(一)简单介绍

前言当前的网络开源库有许多,如volley,okhttp,retrofit等,这三个库当前是比较火的,其中,okhttp和retrofit由square团队开发。关于这三个库的区别,请移步stackoverflow或者知乎查看。开发过程中选择什么样的开源库需要更具我们APP来做出选择。我们选出stackoverflow中的一段话来看下。 上面说,需要与web service通信的时候,我

_StriveG的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Retrofit源码学习五:Retrofit中同步、异步请求解析

最后这里放上我这段时间复习的资料,这个资料也是偶然一位朋友分享给我的,里面包含了腾讯、字节跳动、阿里、百度2019-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。还有高级架构技术进阶脑图、高级进阶架构资料帮助大家学习提升进阶,也可以分享给身边好友一起学习。一起互勉~《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

2301_79098336的博客 962

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Retrofit示例 ,Retrofit 注解学习

这里我们使用http中的get 方法获取users这个接口下,当前user的具体信息,参数为当前user名。返回内容为Http请求的ResponseBody。为网络请求结果json数据所对应的实体类。通过这段代码,我们在最终的回调方法里可以友好的处理请求结果,失败时onFailure方法执行。成功时,onResponse方法执行,我们在这里用Gson解析返回的数据,并进行UI更新操作(setUserView(bean)),

weixin_53545232的博客 1364

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Retrofit源码学习三:Retrofit源码详解一

目录 系列文章: Retrofit优点在哪里? 网络通讯八步骤: 七个关键成员变量解析: builder构建者模式解析: Platform.java baseUrl()方法解析: .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.c...

songzi1228的博客 400

介绍下retrofit

使用注解来定义 HTTP 请求的接口。// 更多请求方法...Retrofit 的底层原理涉及多个关键组件和步骤,包括动态代理、反射、ServiceMethod 的创建和解析、OkHttp 的使用以及 Converter 的使用。通过这些组件和步骤,Retrofit 提供了一个高效、灵活且易于使用的网络请求框架。

hqb112233的博客 1023

Android Retrofit学习(一):Retrofit的使用

Retrofit是一个RESTful的HTTP网络请求框架的封装,网络请求的工作本质上是okHttp完成,而Retrofit仅负责网络请求接口的封装。 Retrofit的使用步骤 1、添加Retrofit库的依赖 implementation 'com.squareup.retrofit2:retrofit:2.1.0' implementation 'com.squareup.retrofit2...

qq_36955849的博客 403

Retrofit(一)

Retrofit(一) 一. Retrofit介绍 Retrofit基于Okhttp封装的网络请求框架,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装. 二. Retrofit简单使用 请求百度URL 1. 添加依赖 implementation 'com.squareup.retrofit2:retrofit:2.2.0' implemen...

qq_43621019的博客 1542

retrofit介绍

Retrofit是什么 简单的说它是一个基于OkHttp的RESTFUL Api请求工具,从功能上来说和Google的Volley功能上很相似,但是使用上很不相似。 Retrofit可以让你简单到调用一个Java方法的方式去请求一个api,这样App中的代码就会很简洁方便阅读 retrofit的好处: ①Retrofit使用注解方式,大大简化了我们的URL拼写形式,而且注解含义一目了然,简单易懂; ②Retrofit使用简单,结构层次分明,每一步都能清晰的表达出之所以要使用的寓意; ④Re...

gb4215287的博客 1313

Retrofit restful client(一)介绍

什么是REST? REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST

arjick的专栏 8465

Retrofit详细介绍

一.简介Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码详见OkHttp Github。本文介绍的是Retrofit2.0+版本的使用一个完整的Get请求1.创建业务请求接口,具体代码如下:获取北京天气的接口,get请求,参数是ke

蓝枫 1726

Okhttp和Retrofit介绍

android常用网络加载库Okhttp介绍

qq_53077129的博客 1925

Retrofit简单介绍及使用

1:Retrofit 2 是一个网络框架 底层是OKHTTP 一个公司出的 square 2:Retrofit 2可以跟 Rxjava交互 3:Rxjava是什么东西 相当于一个网络处理的调味品 基于java 完全异步,基于观察者模式 4:观察者模式 Observer(观察者) 和Observable(被观察者) 如何使用 1:导入各种依赖 2:写一个工具类用来初始化OKHTTP和Retro...

怪咖小白的博客 2887
上一篇: 微信登录软键盘弹出后登录自动弹起
arplay
博客等级 码龄12年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值