全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android网络请求框架Retrofit详解

介绍:

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小时内与您取得联系。