Retrofit
A type-safe HTTP client for Android and Java 。
下文基于 Retrofit 2.0.
介绍
Retrofit将你的Http请求函数转换成Java 接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
这是Retrofit请求gitHub用户信息的例子。
GitHubService 接口的Retrofit的具体实现如下 :
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
基于GitHubService创建的每一个Call,可以向远程服务端发起一个同步或异步的请求。
Call<List<Repo>> repos = service.listRepos("octocat");
应用注解来描述Http 请求
- 支持URL参数和Query参数的替换
- 对象转换成request body (例如JSON 、 protocol buffers等)
- Multipart 请求和文件上传
API声明
在接口方法或它参数上的注解说明了一个请求将被怎么处理
请求方法
每一个方法必须有一个HTTP注解,来说明请求的方式和相对的URL,Retrofit提供了5个内嵌的注解:GET
, POST
, PUT
, DELETE
, and HEAD。 资源的相对URL通过注解指定。
@GET("users/list")
也可以在地址中加入query参数
@GET("users/list?sort=desc")
sort=desc就是 query参数。
URL处理
一个请求URL可以动态更新,通过替换块和方法中的参数。一个替换块是一个由字母数字组成的字符串,被{}包裹。对应的参数必须通过@Path注解,且字符串相同。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);
{id} 为可修改的请求参数,在方法参数的注解中 通样有一个id被@Path注解。
query参数也可以添加。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);
复杂的query参数可以通过map来添加
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);
请求体(request body)
通过@Body注解可以将一个对象作为HTTP请求的请求体(request body)使用
@POST("users/new")
Call<User> createUser(@Body User user);
表单和分块请求
可以声明方法为发送表单或分块请求
表单请求通过@FormUrlEncoded注解,每一个键值对通过@Field注解,包含key,参数具体值是value。
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
分块请求通过@Multipart注解,每个请求部分通过@Part注解
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
分块请求使用Retrofit的转换器或实现自己的RequestBody
来处理自己的串行化。
HEADER处理
通过@Headers注解来给方法增加header信息
@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不互相重写,相同name的header都被包含在请求里。
通过@Header可以动态修改一个请求的头信息。这时相应的参数必须提供@Header注解,如果值是null,将被忽略,否则,将调用toString()方法获取具体的值。
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
通过OkHttp interceptor.可以添加统一的头信息。
同步和异步
Call实例可以同步或异步执行,每个实例只能执行一次。但是调用clone可以创建新的实例来使用。
在Android平台,回调将在主线程调用,在jvm平台,回调在执行http请求的线程执行。
转换器
默认情况下,Retrofit只能序列化它的http bodies到 OkHttp's ResponseBody,它只能接受它的RequestBody
通过@Body注解。
可以添加转化器来支持别的类型,下面留个比较流行的模块可以为你带来方便。
-
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
使用GsonConverterFactory
的例子。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
GitHubService service = retrofit.create(GitHubService.class);
自定义转换器
如果你需要和API通信通过一种Retrofit不支持的内容组织形式(比如YAML, txt, custom format),你可以自定义转换器。可以容易的通过继承 Converter.Factory
class 来自定义转换器。
原文地址 :
相关推荐
retrofit的入门使用
Retrofit入门 Retrofit注解详解 Gson与Converter RxJava与CallAdapter 自定义Converter 自定义CallAdapter 其它说明 前言 本文中的Retrofit均指代Retrofit2.0。 本文涉及到的代码以及测试使用的接口可在上找到。 ...
现在让我们来看一个经典的入门案例,如何将这三个库结合使用: 首先,你需要在项目中添加RxJava、RxAndroid和Retrofit的依赖。在build.gradle文件中,添加相应的依赖项: ```groovy dependencies { ...
该教程从Retrofit的入门开始讲解,然后搭配Rxjava使用,主要讲解在实战项目中如何进行Retrofit封装(主要涉及到OkHttp,部分涉及到Retrofit),后会对源码进行解析,让你知其然,知其所以然。
相比之下,Retrofit的入门门槛较低,且提供了更直观的API设计,减少了样板代码,更适合快速开发。 Retrofit的使用流程通常包括以下几个步骤: 1. **引入依赖**:在构建系统中添加Retrofit及其依赖,例如Gson转换器...
这个"hello retrofit"项目可能是一个入门教程或示例,用于演示如何在Android应用中使用Retrofit进行网络请求。在这个教程中,你可能会学习到以下关键知识点: 1. **Retrofit简介**:Retrofit是由Square公司开发的一...
同时,手册内容深入浅出,既适合新手入门,也能为老手提供有价值的参考。 二、项目实战与练习 为了让学习者能够将理论知识与实践相结合,我们特别准备了项目实战与练习部分。这部分内容包含了多个精心设计的...
本文将详细介绍Android网络框架MVP(Model-View-Presenter)与XRjava、OKhttp以及Retrofit的基础使用,非常适合初学者入门或者作为项目的基础架构。 首先,MVP是一种设计模式,它将应用程序分为三个主要组件:Model...
在Android开发中,结合RxJava和Retrofit2可以构建出高效、灵活的网络请求解决方案。本文将详细解析如何使用这两个库进行基本的网络调用,并提供一个实际的使用实例,包括源码分析和运行效果。 首先,让我们了解...
【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流...
网络编程也是关键部分,如HTTP请求、WebSocket通信,以及使用Retrofit或Volley等库进行网络访问。 对于UI设计,你将学习到Android的视图组件,如Button、EditText、TextView等,以及如何使用约束布局...
此外,还可以使用Retrofit、Volley等库来简化网络编程。 7. **异步处理**:Android的主线程不适宜执行耗时操作,因此需要使用AsyncTask、IntentService或者Handler/Looper机制来进行后台处理,避免阻塞UI线程。 8....
学习使用HttpURLConnection、OkHttp、Retrofit等库进行网络请求是必备技能。 9. **异步处理**:Android主线程(UI线程)不能长时间执行耗时操作,否则会导致应用无响应。理解AsyncTask、Handler/Looper机制或者使用...
Android开发中,经常使用到诸如Glide(图片加载库)、Retrofit(网络请求库)、Butter Knife(视图绑定库)等第三方库,理解它们的工作原理和使用方法能提高开发效率。 《Android开发入门与实战 第二版》附带的源码...
retrofit_flutter 一个新的Flutter项目。 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程,...
4. **网络编程**:讲解如何在安卓应用中实现HTTP请求,使用OkHttp或Retrofit库与服务器交互。 5. **多媒体处理**:介绍如何集成音频、视频和图片功能,以及如何使用相机API。 6. **通知与服务**:讲解如何使用通知...
9. **网络编程**:介绍如何使用HttpURLConnection、OkHttp或Retrofit进行网络请求,以及处理JSON数据。 10. **通知和推送**:讲解如何创建和管理通知,以及如何实现远程推送消息,如Firebase Cloud Messaging(FCM...
可以使用HttpURLConnection、OkHttp等库,或者使用现代的网络API如Retrofit或Volley来简化网络请求。 **Gradle构建系统:** Android Studio采用Gradle作为默认的构建工具。Gradle允许灵活的构建配置,可以自动下载...
Android应用与服务器通信通常采用HTTP/HTTPS协议,涉及网络请求库如OkHttp、Retrofit。JSON作为数据交换格式,需要理解其结构并能使用Gson或Jackson进行解析。存储数据时,可以使用SQLite数据库或SharedPreferences...
3. **第三方库的使用**:介绍如何集成和使用如Retrofit、Gson、OkHttp、Dagger、RxJava等流行开源库,提高开发效率。 4. **测试与性能优化**:讲解单元测试、UI测试,以及如何进行内存泄漏检测和性能优化。 5. **...