Retrofit-一个对Android和Java类型安全的HTTP客户端

引言

Retrofit把你的HTTP API变成了Java接口

public interface GitHubService {  @GET("users/{user}/repos")  Call> listRepos(@Path("user") String user);}

生成类

retrofit生成GitHubService接口的一个实现

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build();GitHubService service = retrofit.create(GitHubService.class);

获得Call对象

每个GitHubService实现类获得的Call对象都能实现一个对远程服务器的同步和一部访问

Call> repos = service.listRepos("octocat");

使用注释来描述HTTP 请求

1.URL参数的替换和查询(query)

2.对象转化成JSON请求

3.Multipart请求和上传

API 介绍

方法和参数的注释表明了请求如何被执行

1.请求方法

每一个方法都有一个请求注释,代表了请求方式和相关的url。有五种基本的请求方式注释:GET, POST, PUT, DELETE, and HEAD.
相关的链接在括号里写明了。

e.g.:

@GET("users/list")//也可以写明查询参数@GET("users/list?sort=desc")

2.URL

请求的URL可以被动态的改变

可以用{id}和@path (“id”)实现动态替换,两个id必须相同

@GET("group/{id}/users")Call> groupList(@Path("id") int groupId);

查询参数的动态替换

链接:group/{id}/users?sort = sort

e.g.:

@GET("group/{id}/users")Call> groupList(@Path("id") int groupId, @Query("sort") String sort);

复杂的查询参数用map实现

@GET("group/{id}/users")Call<List> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options);

3.请求体对象

当请求体是对象的时候,可以用@body标签

@POST("users/new")Call<User> createUser(@Body User user);

4.表单和MULTIPART

@FormUrlEncoded注释用于表单数据的提交,@Field用于标识每个键值对

@FormUrlEncoded@POST("user/edit")Call updateUser(@Field("first_name") String first, @Field("last_name") String last);

Multipart请求是用@ Multipart注释来标识的,每一部分的请求是 @Part标识

@Multipart@PUT("user/photo")Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

5. HEADER部分

可以使用@Headers注释设置一个静态头

@Headers("Cache-Control: max-age=640000")@GET("widget/list")Call> widgetList();@Headers({    "Accept: application/vnd.github.v3.full+json",    "User-Agent: Retrofit-Sample-App"})@GET("users/{username}")Call getUser(@Path("username") String username);

在参数部分使用@Header进行动态头的设置

@GET("user")Call getUser(@Header("Authorization") String authorization)

在Android中,callBACK将被在主线程中执行,在Java中,将被在调用的线程执行。

Retrofit配置

CONVERTERS转化器定制

常见的五种

Gson: com.squareup.retrofit2:converter-gsonJackson: com.squareup.retrofit2:converter-jacksonMoshi: com.squareup.retrofit2:converter-moshiProtobuf: com.squareup.retrofit2:converter-protobufWire: com.squareup.retrofit2:converter-wireSimple XML: com.squareup.retrofit2:converter-simplexml

下面是一个GsonConverterFactory使用的例子

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com")    .addConverterFactory(GsonConverterFactory.create())    .build();GitHubService service = retrofit.create(GitHubService.class);

你也可以自己定制。

Retrofit配置导入

MAVEN

<dependency>  <groupId>com.squareup.retrofit2groupId>  <artifactId>retrofitartifactId>  <version>2.2.0version>dependency>

GRADLE

compile 'com.squareup.retrofit2:retrofit:2.2.0'Retrofit requires at minimum Java 7 or Android 2.3.

PROGUARD配置

# Platform calls Class.forName on types which do not exist on Android to determine platform.-dontnote retrofit2.Platform# Platform used when running on Java 8 VMs. Will not be used at runtime.-dontwarn retrofit2.Platform$Java8# Retain generic type information for use by reflection by converters and adapters.-keepattributes Signature# Retain declared checked exceptions for use by a Proxy instance.-keepattributes Exceptions

更多相关文章

  1. android下的文件权限
  2. om.android.builder.model.SourceProvider.getShadersDirectorie
  3. Android(安卓)布局之FrameLayout
  4. Android(安卓)ndk获取手机内部存储卡的根目录方法
  5. Android之Bitmap对象和字节流之间的相互转换
  6. Android(安卓)拿出后台打印数据
  7. Java反射学习
  8. cocos2dx 在android手机输入特殊字符导致程序崩溃
  9. Android(安卓)API之android.widget.Filterable

随机推荐

  1. Audio系统综述
  2. 系统学习android开发技术 android三部曲
  3. Android中的5种数据存储方式
  4. [Android] 修图工具Draw9patch使用小结(
  5. Android中的三种XML解析方式
  6. Android之WebView
  7. Android中图像变换Matrix的原理
  8. Android Studio如何轻松整理字符串到stri
  9. [Android]Unit Test for Android
  10. android中怎样声明操作通话记录的权利