介绍:

Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrofit2.0.0版本进行实例演示。
使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式。
同步请求:需要在子线程中完成,会阻塞主线程。
Response response = call.execute().body();
异步请求:请求结果在主线程中回调,可以在onResponse()回调方法进行更新UI。
call.enqueue(Callback callback)
使用步骤:
(1) 创建工程,添加jar:
compile 'com.squareup.retrofit2:retrofit:2.0.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0' //这两个jar版本要一致,否则会有冲突
(2) 创建业务请求接口,具体代码如下
/**
* 创建业务请求接口
*/
public interface IUserService {
/**
* GET请求
*/
@GET("Servlet/UserServlet")
Call<User> getUser(@Query("email") String email);
/**
* POST请求
*/
@FormUrlEncoded
@POST("UserServlet")
Call<User> postUser(@Field("name") String name, @Field("email") String email);
}
解释说明:
@GET注解表示GET请求,@Query表示请求参数,将会以key=value(@Query注解参数名称为key,调用传进来的值为value)的方式拼接在url后面.
@POST注解表示POST请求,@FormUrlEncoded将会自动将请求参数的类型设置为application/x-www-form-urlencoded,@FormUrlEncoded注解不能用于Get请求。@Field注解将每一个请求参数都存放至请求体中,还可以添加encoded参数,该参数为boolean型,具体的用法为:
@Field(value = "password", encoded = true) String pwd
encoded参数为true的话,key-value-pair将会被编码,即将中文和特殊字符进行编码转换.
(3)创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
IUserService iUserService = retrofit.create(IUserService.class);
解释说明:
baseUrl()方法制定网络请求的固定绝对地址,一般包括请求协议(如Http)、域名或IP地址、端口号。
创建Retrofit实例时,若没有配置addConverterFactory(GsonConverterFactory.create())将会回调出JSON字符串,配置了将会回调实体对象。
支持的JSON解析库:
Gson: compile ‘com.squareup.retrofit2:converter-gson:2.0.1'
Jackson: compile ‘com.squareup.retrofit2:converter-jackson:2.0.1'
Moshi: compile ‘com.squareup.retrofit2:converter-moshi:2.0.1'
Protobuf: compile ‘com.squareup.retrofit2:converter-protobuf:2.0.1'
Wire: compile ‘com.squareup.retrofit2:converter-wire:2.0.1'
Simple XML: compile ‘com.squareup.retrofit2:converter-simplexml:2.0.1'
Scalars (primitives, boxed, and String): compile ‘com.squareup.retrofit2:converter-scalars:2.0.1'
(4) 调用请求方法,并得到Call实例
Call<ResponseBody> call = iUserService.getUser(xing-java@foxmail.com);
(5) 使用Call实例完成同步或异步请求
/**
* 发送GET请求
*/
private void getRequest() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
IUserService iUserService = retrofit.create(IUserService.class);
Call<User> call = iUserService.getUser("xing-java@foxmail.com");
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
Log.i("MainActivity", "response = " + response);
User user = response.body();
resTxtView.setText(user.toString());
}
@Override
public void onFailure(Call<User> call, Throwable t) {
}
});
}
请求方式:
(1)GET 请求:
GET 请求返回 JSON 字符串:
GET 请求返回实体对象:
(2) POST发送表单:
/**
* 发送POST请求
*/
private void postRequest() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constant.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
IUserService iUserService = retrofit.create(IUserService.class);
Call<User> call = iUserService.postUser("star.tao", "xing-java@foxmail.com");
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
}
@Override
public void onFailure(Call<User> call, Throwable throwable) {
}
});
服务端接收到的结果:
(3)文件上传:
private void uploadFile() {
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(Constant.BASE_URL)
.build();
IUserService iUserService = retrofit.create(IUserService.class);
File file = new File("/sdcard/s.png");
RequestBody fileRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part multipartBody = MultipartBody.Part.createFormData("upload_file", file.getName(), fileRequestBody);
String desc = "this is file description";
RequestBody descRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), desc);
Call<ResponseBody> call = iUserService.uploadFile(descRequestBody, multipartBody);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
Log.i("debug", "upload success");
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 网络请求框架
# Retrofit
# Retrofit 创建网络请求接口实例过程
# Kotlin结合Rxjava+Retrofit实现极简网络请求的方法
# Android Retrofit和Rxjava的网络请求
# Retrofit网络请求和响应处理重点分析讲解
# 将会
# 回调
# 会有
# 还可以
# 这两个
# 设置为
# 表单
# 会以
# 值为
# 大家多多
# 文件上传
# 端口号
# 特殊字符
# UserServlet
# Call
# IUserService
# Servlet
# gt
# getUser
# lt
相关文章:
高端建站如何打造兼具美学与转化的品牌官网?
小型网站制作HTML,*游戏网站怎么搭建?
简历在线制作网站免费版,如何创建个人简历?
如何在阿里云部署织梦网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
如何用PHP快速搭建CMS系统?
seo网站制作优化,网站SEO优化步骤有哪些?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
香港服务器选型指南:免备案配置与高效建站方案解析
桂林网站制作公司有哪些,桂林马拉松怎么报名?
中山网站制作网页,中山新生登记系统登记流程?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
c# 在高并发场景下,委托和接口调用的性能对比
自助网站制作软件,个人如何自助建网站?
如何通过二级域名建站提升品牌影响力?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
名字制作网站免费,所有小说网站的名字?
建站VPS推荐:2025年高性能服务器配置指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
广平建站公司哪家专业可靠?如何选择?
开封网站制作公司,网络用语开封是什么意思?
如何通过IIS搭建网站并配置访问权限?
如何正确选择百度移动适配建站域名?
建站主机如何安装配置?新手必看操作指南
如何用虚拟主机快速搭建网站?详细步骤解析
再谈Python中的字符串与字符编码(推荐)
如何选购建站域名与空间?自助平台全解析
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何在建站宝盒中设置产品搜索功能?
建站之星好吗?新手能否轻松上手建站?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
学校建站服务器如何选型才能满足性能需求?
如何确保西部建站助手FTP传输的安全性?
建站主机是否属于云主机类型?
如何基于云服务器快速搭建网站及云盘系统?
,在苏州找工作,上哪个网站比较好?
如何通过虚拟机搭建网站?详细步骤解析
如何在橙子建站中快速调整背景颜色?
建站之星安装步骤有哪些常见问题?
完全自定义免费建站平台:主题模板在线生成一站式服务
如何在云主机上快速搭建网站?
焦点电影公司作品,电影焦点结局是什么?
建站之星免费版是否永久可用?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
*请认真填写需求信息,我们会在24小时内与您取得联系。