Android网络请求框架Retrofit详解

Android网络请求框架Retrofit详解,第1张

概述介绍:Retrofit是Square公司开发的一款针对Android网络请求框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrofit2.0.0版本进行实例演示。

介绍:

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([email protected]);

(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("[email protected]");  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","[email protected]");  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详解全部内容,希望文章能够帮你解决Android网络请求框架Retrofit详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1144917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存