Retrofit使用总结

作者: 牧童遥指2000 | 来源:发表于2017-03-14 21:16 被阅读103次

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

引言

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

public interface GitHubService {
  @GET("users/{user}/repos")
  Call<List<Repo>> 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<List<Repo>> repos = service.listRepos("octocat");

使用注释来描述HTTP 请求

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

2.对象转化成JSON请求

  1. 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<List<User>> groupList(@Path("id") int groupId);

查询参数的动态替换

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

e.g.:


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

复杂的查询参数用map实现

@GET("group/{id}/users")
Call<List<User>> 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<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

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


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

5. HEADER部分

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


@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();


@Headers({
    "Accept: application/vnd.github.v3.full+json",
    "User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

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

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

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

Retrofit配置

CONVERTERS转化器定制

常见的五种

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

下面是一个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.retrofit2</groupId>
  <artifactId>retrofit</artifactId>
  <version>2.2.0</version>
</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


相关文章

  • retrofit2.0源码分析

    Android 手把手教你使用Retrofit2 Retrofit2源码分析 总结 这里总结下Retrofit2的...

  • Retrofit2个人使用总结

    该文章讲述Retrofit中的一些基本使用总结,不涉及源码的介绍,是个人在使用中总结出来对Retrofit的用法。...

  • Retrofit使用总结

    引入库: 使用方式: 1.不带参数get请求: 2.带参数get请求: 3.url带参数get请求: 4.不带参数...

  • Retrofit使用总结

    1、 Post请求可以通过@Body提交整个表单,也可以通过@Field提交单个字段。2、使用拦截器统一处理Htt...

  • Retrofit使用总结

    Retrofit-一个对Android和Java类型安全的HTTP客户端 引言 Retrofit把你的HTTP A...

  • 【Retrofit】网络请求参数@Path、@Query、@Qu

    最近开始在项目中使用Retrofit,在这里总结一下Retrofit网络请求参数@Path、@Query、@Que...

  • 6.2开源框架-retrofit网络框架-详解

    retrofit源码解析 retrofit使用方式 retrofit源码剖析 retrofit使用方式: 3个步骤...

  • Retrofit的理解总结

    Retrofit使用总结与积累 在安卓项目中使用Retrofit已经接近两年了,但是一直都是按照网上或者公司前辈的...

  • Retrofit2 + RxJava2 封装

    使用前需要学习retrofit2 和rxjava等相关知识,总结一下比较好的文章 retrofit 你真的会用Re...

  • Retrofit--网络通讯框架

    1. 使用 2. Retrofit框架的使用实例 Retrofit的使用实例 3. Retrofit框架的使用流程...

网友评论

本文标题:Retrofit使用总结

本文链接:https://www.haomeiwen.com/subject/cehknttx.html