Retrofit 2.0

Retrofit是SQUARE美国一家移动支付公司最近新发布的在Android平台上http访问的开源项目

一、Retrofit是什么

github官方描述:A type-safe HTTP client for Android and Java
直译一下:一款为Android和Java提供的类型-安全的HTTP客户端。
总的来说,它是用来封装网络请求的。
它采用接口注释的方式来调用网络请求,不用写实现层(已封装好)。

二、Retrofit怎么使用

1.添加依赖

    //Retrofit Type-safe HTTP client for Android and Java    compile 'com.squareup.retrofit2:retrofit:2.2.0'    //转换器    compile 'com.squareup.retrofit2:converter-gson:2.2.0'    compile 'com.squareup.retrofit2:converter-jackson:2.2.0'
下面两个依赖是Json和Java对象之间的转化器 你可以不添加

用基础的HttpURLConnection自己写过网络请求的同学肯定被这样的问题困扰:需要自己解析Json(实现Json和对象之间的转化),而Retrofit支持各种Json转化器:

  • 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

2.初始化

Retrofit retrofit = new Retrofit.Builder()               .baseUrl("XXX你的访问URLXXX")               .addConverterFactory(GsonConverterFactory.create())               .build();

3.编写API

假设我要用userDevice 和 schoolId 去查询年级名和Id

public interface APIManager {    @POST("XXX/XXX你的访问具体接口的路径XXX")    Call getGradeNameAndId(@Query("userDevice") String userDevice, @Query("schoolId") Integer schoolId);}

其中AjaxMsg是和接口返回数据对应的对象

@Query("name")来设定body的parameters(参数)

  • 如果想用表单 @FieldMap
@FormUrlEncoded@POST("/url") Call postForm(     @FieldMap Map maps);
  • 如果直接用对象 @Body
@POST("url") Call PostBody(      @Body Objects objects);
  • 如果直接多参数 @QueryMap
@PUT("/url")Call queryMap(      @QueryMap Map maps);
  • 如果上传文件 @Part
@Multipart@POST("/url")Call uploadFlie(      @Part("description") RequestBody description,      @Part("files") MultipartBody.Part file);
  • 如果多文件上传 @PartMap()
@Multipart@POST("{url}")Call uploadFiles(      @Path("url") String url,      @PartMap() Map maps);

4.调用API

Call call = apiService.getGradeNameAndId("inf",1);        call.enqueue(new Callback() {            @Override            public void onResponse(Call call, Response response) {                if(response.isSuccessful()){                    Log.d("httpResult","isSuccessful");                    AjaxMsg grade = response.body();                    Log.d("httpResult",grade.getGradeName());                }                else{                    Log.d("httpResult","isNotSuccessful");                }            }            @Override            public void onFailure(Call call, Throwable t) {            }        });

Retrofit内部用了Json转换器自动将Json转换为Java对象
response.body()返回的就是这个对象

更多相关文章

  1. Android跨进程通信IPC之6——Parcel--Binder对象的写入和读出
  2. OkHttp3实现原理
  3. Android(安卓)WebView 精简Demo
  4. Android检查网络是否可用及上网请求
  5. android-async-http如何使用
  6. 第五章 网络 之 Android网络知识&框架(二)
  7. Drawable和Bitmap转换
  8. Android开发重修
  9. android retrofit2.0框架的使用介绍

随机推荐

  1. Android 系统搜索框(有浏览记录)
  2. 探寻 Android 代码抄袭细节,情节还不算严
  3. WebView显示网页
  4. [Android] 无法创建项目问题解决
  5. android sdk 更新速度慢的解决办法
  6. android 简单的上拉加载实现
  7. 客户端性能测试
  8. view随着键盘移动
  9. Android 状态栏透明
  10. Android——高德地图设置中心点和缩放比