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);
每個GitHubService實現類獲得的Call物件都能實現一個對遠端伺服器的同步和一部訪問
Call> repos = service.listRepos("octocat");
1.URL引數的替換和查詢(query)
2.物件轉化成JSON請求
- Multipart請求和上傳
方法和引數的註釋表明了請求如何被執行
每一個方法都有一個請求註釋,代表了請求方式和相關的url。有五種基本的請求方式註釋:GET, POST, PUT, DELETE, and HEAD.
相關的連結在括號裡寫明瞭。
e.g.:
@GET("users/list")
//也可以寫明查詢引數
@GET("users/list?sort=desc")
請求的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);
當請求體是物件的時候,可以用@body標籤
@POST("users/new")
Call createUser(@Body User user);
@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);
可以使用@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中,將被在呼叫的執行緒執行。
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);
你也可以自己定製。
com.squareup.retrofit2
compile 'com.squareup.retrofit2:retrofit:2.2.0'
Retrofit requires at minimum Java 7 or Android 2.3.
# 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
相關文章
- yield全面總結
- Flutter填坑全面總結Flutter
- Windows RocketMQ使用方法經驗總結WindowsMQ
- SAP轉儲單全面總結
- mysql函式全面總結KSVMMySql函式
- C語言全面總結-3C語言
- Retrofit與LiveData結合LiveData
- STM32 外部中斷使用方法總結
- 超全面的vue.js使用總結Vue.js
- cookie和session的區別(全面總結)CookieSession
- 很全面的vue面試題總結Vue面試題
- Qt訊號與槽使用方法最完整總結QT
- 微服務最全詳解(圖文全面總結)微服務
- 全面總結: Golang 呼叫 C/C++,例子式教程GolangC++
- 可能是最全面的 python 字串拼接總結Python字串
- 可能是最全面的python字串拼接總結Python字串
- 個人總結——全面的『Python編碼規範』Python
- 負載均衡最全詳解(圖文全面總結)負載
- java4~6次大作業全面總結Java
- Hive常用效能優化方法實踐全面總結Hive優化
- C++中list的使用方法及常用list操作總結C++
- MySQL/Oracle資料庫最佳化總結(非常全面)MySqlOracle資料庫
- Flutter學習總結系列----Flutter基礎全面詳解Flutter
- 分散式儲存最全詳解(圖文全面總結)分散式
- 全面總結 JS 中浮點數運算問題JS
- 從原理到實戰,全面總結 Android HTTPS 抓包AndroidHTTP
- 檔案上傳漏洞全面滲透姿勢總結
- JavaScript裡的陣列Array使用方法總結,超全的oJavaScript陣列
- Newtonsoft序列化與反序列化json字串使用方法總結JSON字串
- 高併發架構最全詳解(圖文全面總結)架構
- SSO單點登入最全詳解(圖文全面總結)
- DDD領域驅動最全詳解(圖文全面總結)
- 全面總結AI發展現狀和未來趨勢AI
- Android:這是一份全面 & 詳細的Retrofit 2.0 原始碼分析指南Android原始碼
- YUIDoc的使用方法小結UI
- 全面總結!阿里巴巴資料庫運維演進之路阿里資料庫運維
- 9大效能最佳化方案詳解(圖文全面總結)
- android APK瘦身全面總結——如何從32.6M到13.6MAndroidAPK