Retrofit使用教程(二)
上一篇文章講述了Retrofit的簡單使用,這次我們學習一下Retrofit的各種HTTP請求.
Retrofit基礎
在Retrofit中使用註解的方式來區分請求型別.比如@GET("")
表示一個GET請求,括號中的內容為請求的地址.
格式 | 含義 |
---|---|
@GET |
表示這是一個GET請求 |
@POST |
表示這個一個POST請求 |
@PUT |
表示這是一個PUT請求 |
@DELETE |
表示這是一個DELETE請求 |
@HEAD |
表示這是一個HEAD請求 |
@OPTIONS |
表示這是一個OPTION請求 |
@PATCH |
表示這是一個PAT請求 |
基本的HTTP請求
Retrofit可實現基本HTTP請求,包括GET
,POST
,PUT
,DELETE
等.
1.GET
請求
1 2 |
@GET("/record") Call<PhoneResult> getResult(); |
2.POST
請求
1 2 |
@POST("/record") Call<PhoneResult> getResult(); |
3.PUT
請求
1 2 |
@PUT("/record") Call<PhoneResult> getResult(); |
4.DELETE
請求
1 2 |
@DELETE("/record") Call<PhoneResult> getResult(); |
伺服器介面型別
伺服器介面有很多中,本人經驗有限,目前接觸較多為以下幾種:
直接請求型
即直接對某一地址或組合某一地址發起請求
如:對/result
和/result/{id}
發起GET
請求,其中{id}
中的id
在實際使用時填寫實際值即可.
帶參查詢型
對某一地址進行帶參查詢請求
如:https://www.baidu.com/s?wd=123
為對介面https://www.baidu.com/s
進行引數為wd=123
的GET
查詢請求.
帶Header型
即請求時要求帶上Header
Retrofit中如何寫?
直接請求型
1.如果是直接請求某一地址,寫法如下:
1 2 |
@GET("/record") Call<PhoneResult> getResult(); |
2.如果是組合後直接請求,如/result/{id}
寫法如下:
1 2 |
@GET("/result/{id}") Call<PhoneResult> getResult(@Path("id") String id); |
帶參查詢型
如12306的查詢介面https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-03-18&from_station=BJP&to_station=CDW
,寫法如下:
1 2 3 |
@GET("/otn/lcxxcx/query") Call<Result> query(@Query("purpose_codes") String codes, @Query("queryDate") String date, @Query("from_station") String from, @Query("to_station") String to) |
帶Header型
比如要更新某個賬戶資訊,其介面地址為/info
,需要帶的Header有裝置資訊device
,系統版本version
,還要帶請求引數要更新賬戶的id
,程式碼如下:
1 2 3 |
@POST("/info") Call<Object> updateInfo(@Header("device") String device, @Header("version") int version, @Field("id") String id); |
注:本想給每一種請求新增一個請求例項,但是確實不太好找.
例項
找了很久發現多說提供了一些POST請求介面,下面就以多說的介面為例,看一下如何使用Retrofit
寫請求.
基礎URL
多說的介面基礎地址為:http://api.duoshuo.com
,則構建Retrofit例項程式碼如下:
1 2 3 4 |
Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .baseUrl("http://api.duoshuo.com") .build(); |
獲取文章評論、轉發數
介面地址為:/threads/counts
HTTP請求方式:GET
請求示例為:http://api.duoshuo.com/threads/counts.json?short_name=official&threads=4ff1cbc43ae636b72a00001d
後面的.json
為返回資料的格式,此處我們使用json
格式.
請求程式碼如下:
1 2 3 |
@GET("/threads/counts.json") Call<Object> getCommit(@Query("short_name") String shortName, @Query("threads") String threads); |
匿名發表新評論
介面地址為:/posts/create
HTTP請求方式:POST
請求示例為:
Request URL:
http://api.duoshuo.com/posts/create.json
Request Method:POST
Post Data:short_name=official&author_email=jp.chenyang%40gmail.com&author_name=Perchouli&thread_id=1152923703638301959&author_url=http%3A%2F%2Fduoshuo.com&message=匿名發表新評論
1.Field方式實現
1 2 3 4 5 6 7 8 9 |
@FormUrlEncoded @POST("/posts/create.json") Call<CommitResult> createCommit(@Field("secret") String secret, @Field("short_name") String shortName, @Field("author_email") String authorEmail, @Field("author_name") String authorName, @Field("thread_key") String threadKey, @Field("author_url") String author_url, @Field("message") String message); |
2.Field Map實現方式
1 2 3 |
@FormUrlEncoded @POST("/posts/create.json") Call<CommitResult> createCommit(@FieldMap Map<String, String> map); |
獲取Map方式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
public class CommitParam { private String short_name; private String author_email; private String author_name; private String thread_id; private String author_url; private String message; public String getShort_name() { return short_name; } public void setShort_name(String short_name) { this.short_name = short_name; } public String getAuthor_email() { return author_email; } public void setAuthor_email(String author_email) { this.author_email = author_email; } public String getAuthor_name() { return author_name; } public void setAuthor_name(String author_name) { this.author_name = author_name; } public String getThread_id() { return thread_id; } public void setThread_id(String thread_id) { this.thread_id = thread_id; } public String getAuthor_url() { return author_url; } public void setAuthor_url(String author_url) { this.author_url = author_url; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Map<String, String> createCommitParams(){ Map<String, String> params = new HashMap<>(); params.put("short_name", short_name); params.put("author_email", author_email); params.put("author_name", author_name); params.put("thread_id", thread_id); params.put("author_url", author_url); params.put("message", message); return params; } } |
專案地址在此:Dev-Wiki/RetrofitDemo
更多文章請移步我的部落格:DevWiki Blog
相關文章
- Retrofit 2.0 使用教程
- Android Retrofit 2.0(二)使用教程OkHttp3 + Gson + RxJavaAndroidHTTPRxJava
- Retrofit基本使用
- Retrofit原始碼分析二 代理模式原始碼模式
- Retrofit原始碼解讀(二)--Retrofit中網路通訊相關原始碼
- Android Retrofit的使用Android
- cmake使用教程(二)-新增庫
- Retrofit2.0使用詳解
- Docker框架的使用系列教程(二)Docker框架
- Retrofit使用方法全面總結
- Retrofit2+RxJava 簡單使用RxJava
- 配置Retrofit網路框架及其使用框架
- Retrofit 原始碼學習與使用原始碼
- OkHttp、rxJava、Retrofit聯合網路請求(二)HTTPRxJava
- 【原始碼SOLO】Retrofit2原始碼解析(二)原始碼
- Android Retrofit原始碼解析:都能看懂的Retrofit使用詳解Android原始碼
- 【GLSL教程】(二)在OpenGL中使用GLSL
- 細細品讀Retrofit的設計之美二
- Android中Retrofit的封裝使用Android封裝
- 使用retrofit進行網路請求
- 初探RxJava以及結合Retrofit的使用RxJava
- 使用RxJava2 + Retrofit 報錯DuplicateFileExceptionRxJavaException
- ImageJ軟體使用教程(二):影像測量
- Android Retrofit 2.5.0使用基礎詳解Android
- 常用輪子之Retrofit基本使用及原理
- Rxjava2與Retrofit2的使用RxJava
- Retrofit中如何正確的使用https?HTTP
- Android框架第(五)篇---Retrofit基本使用Android框架
- Retrofit2使用方式和原始碼解析原始碼
- Retrofit + RxJavaRxJava
- Retrofit系列
- Aspose.Words使用教程之插入文件元素(二)
- Oracle GoldenGate 學習教程二、配置和使用OracleGo
- Zend Studio使用教程:使用PHP 7進行開發(二)PHP
- 我們真的需要使用RxJava+Retrofit嗎?RxJava
- 使用Retrofit+RxJava實現網路請求RxJava
- Android 網路框架Retrofit的使用和解析Android框架
- RxJava+Retrofit+OkHttp深入淺出-mvp(使用篇)RxJavaHTTPMVP