介绍:

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
相关文章:
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何通过万网虚拟主机快速搭建网站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
成都网站制作公司哪家好,四川省职工服务网是做什么用?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
在线制作视频的网站有哪些,电脑如何制作视频短片?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在搬瓦工VPS快速搭建网站?
如何在IIS管理器中快速创建并配置网站?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何在橙子建站中快速调整背景颜色?
大型企业网站制作流程,做网站需要注册公司吗?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
建站之星如何实现PC+手机+微信网站五合一建站?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
在线制作视频网站免费,都有哪些好的动漫网站?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
如何构建满足综合性能需求的优质建站方案?
如何选择适合PHP云建站的开源框架?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
详解jQuery停止动画——stop()方法的使用
如何正确选择百度移动适配建站域名?
电商网站制作公司有哪些,1688网是什么意思?
南平网站制作公司,2025年南平市事业单位报名时间?
,有什么在线背英语单词效率比较高的网站?
c# 服务器GC和工作站GC的区别和设置
教学网站制作软件,学习*后期制作的网站有哪些?
为什么Go需要go mod文件_Go go mod文件作用说明
婚礼视频制作网站,学习*后期制作的网站有哪些?
活动邀请函制作网站有哪些,活动邀请函文案?
*服务器网站为何频现安全漏洞?
建站之星后台密码遗忘?如何快速找回?
代刷网站制作软件,别人代刷火车票靠谱吗?
如何快速生成橙子建站落地页链接?
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
北京网站制作的公司有哪些,北京白云观官方网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
python的本地网站制作,如何创建本地站点?
高端建站三要素:定制模板、企业官网与响应式设计优化
如何彻底删除建站之星生成的Banner?
建站之星代理如何获取技术支持?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
建站OpenVZ教程与优化策略:配置指南与性能提升
实例解析angularjs的filter过滤器
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
*请认真填写需求信息,我们会在24小时内与您取得联系。