Android中Retrofit的简要介绍
作者:吉格斯实验室 发布时间:2022-07-19 08:42:49
Retrofit
A type-safe HTTP client for Android and Java
适用于Java和Android的安全的HTTP客户端
Retrofit是一个可用于Android和Java的网络库,使用它可以简化我们的网络操作,提高效率和正确率。它将请求过程和底层代码封装起来只暴露我们业务中的请求和返回数据模型。
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
@这是一个Retrofit将Rest API(服务端post或get请求)转换为Java接口的例子
每一个由接口返回的Call对象都可以与远程web服务端进行同步或者异步的HTTP请求通信。例如:
Call<List<Repo>> repos = service.listRepos("octocat");
为什么选择Retrofit
AsyncHttp ,Volley和Retrofit的对比
Retrofit中的注解
Retrofit使用注解来描述HTTP请求
请求方式
每一个请求必须指定http请求相对应的url注解和请求方式(内置5种请求方式注解:GET、POST、PUT 、DELETE、HEAD)
@GET("users/list")
也可以将参数跟在后面
@GET("users/list?sort=desc")
URL操作
一个请求的URL的参数可以通过{}包裹快来动态替换,然后在相应的@Path参数中进行赋值。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
例如这个{id}在groupList请求中的@Path(“id”) int groupId来对应赋值。
也可以使用@Query给groupList请求方法动态添加其他请求参数
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
如果是比较多的请求参数,我们可以使用Map来构建
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
请求的Body
能够通过@Body注解来指定一个方法作为HTTP请求主体
@POST("users/new")
Call<User> createUser(@Body User user);
这个参数对象会被Retrofit实例中的converter进行转化。如果没有给Retrofit实例添加任何converter的话则只有RequestBody可以作为参数使用。
form encode 和 multipart
方法也可以通过声明来发送form-encoded和multipart类型的数据。
可以通过@FormUrlEncoded注解方法来发送form-encoded的数据。每个键值对需要用@Filed来注解键名,随后的对象需要提供值。
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
也可以通过@Multipart注解方法来发送Mutipart请求。每个部分需要使用@Part来注解。
@Multipart@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
多个请求部分需要使用Retrofit的converter或者是自己实现 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)的话,那么这个头部参数就会被忽略。否则的话, 值的 toString 方法将会被调用,并且使用调用结果。
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
来源:https://blog.csdn.net/dawanganban/article/details/78442176
猜你喜欢
- Beanutils.copyProperties()用法及重写提高效率特别说明本文介绍的是Spring(import org.springf
- 简介我们在开发web应用的时候,有时候为了适应浏览器大小的调整,需要动态对页面的组件进行位置的调整。这时候就会用到flow layout,也
- 获取Token/// <summary> /// 获取Token &nbs
- spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置:一、添加pom依赖
- c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法。在.net
- 一、背景说明由于以前在项目中一直使用sqlmap.xml进行mybatis语句的编写和实现,其xml实现动态更新和查询较为方便,而目前由于技
- 使用Apache.POI中HSSFWorkbook导出到Excel,具体内容如下所示:1.引入Poi依赖(3.12)依赖如下:<dep
- 以前一直接触.net相关的web开发,现在猛然使用javaWeb还是很不习惯,就连搭个框架也是第一次。一、谈谈项目架构一开始接触.net相关
- 前言本文主要介绍下Spring事务中的传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是S
- 在混淆编译之前,我的程序可以正常运行,混淆编译时,报告如下错误: Error:Execution failed for task ‘:gvi
- MD5加密MD5是由MD2、MD3、MD4演变过来的,虽然MD5加密算法现在有些人已经将其解开了,但是它的加密机制依然很强大,我想绝大对数还
- 前言任何一个服务如果没有监控,那就是两眼一抹黑,无法知道当前服务的运行情况,也就无法对可能出现的异常状况进行很好的处理,所以对任意一个服务来
- 在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户
- 传统的web项目,只需要在web.xml里配置多个即可,并且支持多个url-pattern在spring boot中,我们默认无需配置,系统
- 文档中的设置有序或无序列表是一种反应内容上下级关系或者内容相同属性的方式,与单纯的文字叙述相比,它能有效增强文档内容的条理性,突出重点。因此
- Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。
- 场景日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的
- 本文实例讲述了C#实现回文检测的方法。分享给大家供大家参考。具体分析如下:回文:称正读和反读都相同的字符序列为“回文”,如“abba”、“a
- 本文实例讲述了C#异步调用的方法。分享给大家供大家参考。具体如下:using System;using System.Collections
- 一、树形结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树