原文鏈接:https://futurestud.io/blog/retrofit-multiple-query-parameters-of-same-name
本文屬于我們的Retrofit 系列, 描述了如何使用一個或多個相同名字query
參數(shù)執(zhí)行請求. 下面的列表顯示了該系列的所有文章:
Retrofit 系列目錄
- 開始創(chuàng)建android客戶端[已翻譯]
- Android上的基本認(rèn)證[已翻譯]
- Android上的令牌認(rèn)證[已翻譯]
- Android上的OAuth
- 多個 Query 參數(shù)使用同一名字
- 同步與異步請求[已翻譯]
- 在請求體里發(fā)送對象[已翻譯]
- 自定義一個響應(yīng)轉(zhuǎn)換器[已翻譯]
- 添加自定義請求頭
- 可選的 Query 參數(shù)
- 如何集成 XML 轉(zhuǎn)換器
- 使用 Log Level 調(diào)試請求
- 如何上傳文件
- Series Round-Up
- Retrofit 2 — 1.9 升級指南
- Retrofit 2 — 如何上傳文件
- Retrofit 2 — Log 請求與響應(yīng)
- Retrofit 2 — Android 上的 Hawk 認(rèn)證
- Retrofit 2 — 簡單錯誤處理
- 如何在 Retrofit 1 里使用 OkHttp 3
- Retrofit 2 — 圖書更新發(fā)布慶典
- 提交表單數(shù)據(jù) — Urlencoded
- 提交表單數(shù)據(jù) — Urlencoded 使用FieldMap
- Retrofit 2 — 在 OkHttp 攔截器里管理請求頭部
- Retrofit 2 — 如何給每一個請求添加 Query 參數(shù)
- Retrofit 2 — 使用QueryMap 添加多個 Query 參數(shù)
- Retrofit 2 — 如何在請求時使用動態(tài) Url
- Retrofit 2 — Url 處理管宵,分辨和解析
- Retrofit 2 — POST 和PUT 請求里的常量, 默認(rèn)值和邏輯值
- Retrofit 2 — 如何下載文件
- Retrofit 2 — 取消請求
- Retrofit 2 — 重用分析請求
- Retrofit 2 — 如何在運(yùn)行時修改 API Base Url
- 可選Path參數(shù)
- 如何刷新 Access Token
- Retrofit 2 — 如何提交文本請求體
- Retrofit 2 — 使用 Query 參數(shù)來分頁
- Retrofit 2 — 使用 鏈接頭和動態(tài) Url 來分頁(比如GitHub)
- Retrofit 2 — 使用范圍頭字段來分頁 (比如 Heroku)
- Retrofit 2 — 轉(zhuǎn)換器介紹
- Retrofit 2 — 添加并自定義 Gson 轉(zhuǎn)換器
- Retrofit 2 — 實(shí)現(xiàn)自定義轉(zhuǎn)換器
- Retrofit 2 — 只在開發(fā)環(huán)境里啟用日志
- Retrofit 2 — 如何上傳多個文件
- Retrofit 2 — Passing Multiple Parts Along a File with @PartMap
- Retrofit 2 — 模仿服務(wù)端響應(yīng)基本概念
- Retrofit 2 — 模仿服務(wù)端響應(yīng)自定義網(wǎng)絡(luò)行為
- Retrofit 2 — 使用 @HeaderMap 定義動態(tài)請求頭
Query 參數(shù)
Query 參數(shù)是從客戶機(jī)到服務(wù)器傳送數(shù)據(jù)的常用方法. 我們都知道他們的請求. 讓我們看下實(shí)例, 通過id=123
指定特定的task.
https://api.example.com/tasks?id=123
示例返回的響應(yīng)是只有 id=123
的task.
Retrofit 的query 參數(shù)方法定義直截了當(dāng).
Retrofit 1.9
public interface TaskService {
@GET("/tasks")
Task getTask(@Query("id") long taskId);
}
Retrofit 2
public interface TaskService {
@GET("/tasks")
Call<Task> getTask(@Query("id") long taskId);
}
getTask(…)
方法需要taskId
參數(shù). 此參數(shù)將會被 Retrofit 映射到給定的@Query()
參數(shù)名. 本例中 參數(shù)名為id
, 最終的請求url看起來像這樣
/tasks?id=<taskId>
多個 Query 參數(shù)
有些用例需要傳遞多個同名的query參數(shù). 考慮到前面的從API請求task的例子邮绿,我們可以擴(kuò)展query參數(shù)以接受多個任務(wù)的id的列表.
我們想創(chuàng)建的請求 url 看起來像這樣
https://api.example.com/tasks?id=123&id=124&id=125
預(yù)期的服務(wù)器響應(yīng)應(yīng)該是query參數(shù)給定的ids=[123, 124, 125]
的task列表.
Retrofit 的執(zhí)行多個同名 query 參數(shù)請求的方法是通過提供id
列表作為參數(shù)(沒搞懂,譯者注). Retrofit 會連接給定的列表中名稱相同的多個查詢參數(shù).
Retrofit 1.9
public interface TaskService {
@GET("/tasks")
List<Task> getTask(@Query("id") List<Long> taskIds);
}
Retrofit 2
public interface TaskService {
@GET("/tasks")
Call<List<Task>> getTask(@Query("id") List<Long> taskIds);
}
由此產(chǎn)生的請求的url看起來像在本節(jié)(多個查詢參數(shù))的開始的上面的例子.
請享受編程并使用 Retrofit. 如果你遇到了問題或者困難, 請 Twitter @futurestud_io.