Retrofit学习笔记(一)

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()返回的就是这个对象

你可能感兴趣的:(Retrofit学习笔记(一))