Retrofit使用方法全面總結

yzf01發表於2021-09-09
Retrofit使用總結

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("")
    .build();

GitHubService service = retrofit.create(GitHubService.class);
獲得Call物件

每個GitHubService實現類獲得的Call物件都能實現一個對遠端伺服器的同步和一部訪問


Call> 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> 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> groupList(@Path("id") int groupId, @QueryMap Map options);
3.請求體物件

當請求體是物件的時候,可以用@body標籤


@POST("users/new")
Call 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-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("")
    .addConverterFactory(GsonConverterFactory.create())
    .build();

GitHubService service = retrofit.create(GitHubService.class);

你也可以自己定製。

Retrofit配置匯入
MAVEN

com.squareup.retrofit2
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

相關文章