Retrofit閑聊,初學(xué)者可以參考

一.先看一個(gè)完整的例子:

package com.github.ikidou;

import java.io.IOException;

import okhttp3.ResponseBody;

import retrofit2.Call;

import retrofit2.Callback;

import retrofit2.Response;

import retrofit2.Retrofit;

import retrofit2.http.GET;

import retrofit2.http.Path;

/**

* [Retrofit入門]源碼

*/

public class Example01{

public interface BlogService{

@GET("blog/{id}")//這里的{id} 表示是一個(gè)變量

CallgetBlog(/** 這里的id表示的是上面的{id}*/@Path("id")intid);

? ? }

public static void main(String[]args)throws IOException{

Retrofit retrofit=new Retrofit.Builder()

.baseUrl("http://localhost:4567/")

? ? ? ? ? ? ? ? .build();

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

Call call=service.getBlog(2);

//用法和OkHttp的call如出一轍

//不同的是如果是Android系統(tǒng)回調(diào)方法執(zhí)行在主線程

call.enqueue(new Callback() {

@Override

public void onResponse(

Call call , Response response) {

try{

System.out.println(response.body().string());

}catch(IOExceptione) {

e.printStackTrace();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

@Override

public void onFailure(Callcall,Throwablet) {

t.printStackTrace();

? ? ? ? ? ? }

? ? ? ? });

? ? }

}

二.進(jìn)行拆解分析:

public interface BlogService{

@GET("blog/{id}")//這里的{id} 表示是一個(gè)變量

CallgetBlog(/** 這里的id表示的是上面的{id}*/@Path("id")intid);

? ? }

這個(gè)接口算是retrofit里面的重要部位.

@GET("blog/{id}")代表注解,不清楚的可以google或者百度了解一下.

{id}在@GET注解中,指CallgetBlog(@Path("id")int id);這個(gè)函數(shù)里面的id,后期調(diào)用函數(shù)CallgetBlog將會(huì)傳入?yún)?shù)id.

可以使用方法中的替換塊和參數(shù)動(dòng)態(tài)更新請(qǐng)求URL抑堡。

讀懂下面這幾句話:

Use annotations to describe the HTTP request:

URL parameter replacement and query parameter support

Object conversion to request body (e.g., JSON, protocol buffers)

Multipart request body and file upload

以上就是注解相關(guān)傳參方式解釋.

如果自學(xué)能力強(qiáng),英文基礎(chǔ)好的,可以直接在官網(wǎng)學(xué)習(xí)

官網(wǎng)學(xué)習(xí)鏈接

1.REQUEST METHOD(請(qǐng)求方法)

Every method must have an HTTP annotation that provides the request method and relative URL. There are five built-in annotations: GET, POST, PUT, DELETE, and HEAD. The relative URL of the resource is specified in the annotation.

Query parameters(查詢參數(shù)) can also be added.

比如從服務(wù)器上獲取新聞信息等.

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

//@Query將在url地址中追加類似“page=1”的字符串壁畸,形成提交給服務(wù)端的請(qǐng)求參數(shù)

2.對(duì)于復(fù)雜的查詢參數(shù)組合递惋,可以使用MAP。

@GET("group/{id}/users")

Call<List<User>>groupList(@Path("id") int groupId , @QueryMap Map options);

@QueryMap Map?options這個(gè)并不是要像@Path一樣拼接進(jìn)參數(shù).

3.REQUEST BODY(請(qǐng)求體形式)

An object can be specified for use as an HTTP request body with the?@Body?annotation.

@POST("users/new")

Call<User>createUser(@Body User user);

4. FORM ENCODED AND MULTIPART(上傳信息)

Methods can also be declared to send form-encoded and multipart data.Form-encoded data is sent when?@FormUrlEncoded?is present on the method. Each key-value pair is annotated with?@Fieldcontaining the name and the object providing the value.

@FormUrlEncoded

@POST("user/edit")

Call<User>?updateUser(@Field("first_name") String first, @Field("last_name") String last);

Multipart requests are used when?@Multipart?is present on the method. Parts are declared using the?@Part?annotation.

@Multipart

@PUT("user/photo")

Call<User>?updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

5.HEADER MANIPULATION

注意遗淳,頭文件不會(huì)覆蓋彼此轧膘。所有具有相同名稱的頭將包含在請(qǐng)求中(如果不清楚的可以先大概學(xué)習(xí)HTTP請(qǐng)求相關(guān)知識(shí))

You can set static headers for a method using the?@Headers?annotation.

@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); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

A request Header can be updated dynamically using the?@Header?annotation. A corresponding parameter must be provided to the?@Header. If the value is null, the header will be omitted. Otherwise,?toString?will be called on the value, and the result used.

@GET("user")

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脚仔,一起剝皮案震驚了整個(gè)濱河市纵寝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赖临,老刑警劉巖胞锰,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異兢榨,居然都是意外死亡嗅榕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門色乾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誊册,“玉大人,你說我怎么就攤上這事暖璧“盖樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵澎办,是天一觀的道長嘲碱。 經(jīng)常有香客問我,道長局蚀,這世上最難降的妖魔是什么麦锯? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮琅绅,結(jié)果婚禮上扶欣,老公的妹妹穿的比我還像新娘。我一直安慰自己千扶,他們只是感情好料祠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著澎羞,像睡著了一般髓绽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妆绞,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天顺呕,我揣著相機(jī)與錄音枫攀,去河邊找鬼。 笑死株茶,一個(gè)胖子當(dāng)著我的面吹牛来涨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忌卤,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扫夜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了驰徊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤堕阔,失蹤者是張志新(化名)和其女友劉穎棍厂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體超陆,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牺弹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了时呀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片张漂。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谨娜,靈堂內(nèi)的尸體忽然破棺而出航攒,到底是詐尸還是另有隱情,我是刑警寧澤趴梢,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布漠畜,位于F島的核電站,受9級(jí)特大地震影響坞靶,放射性物質(zhì)發(fā)生泄漏憔狞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一彰阴、第九天 我趴在偏房一處隱蔽的房頂上張望瘾敢。 院中可真熱鬧,春花似錦尿这、人聲如沸簇抵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽正压。三九已至,卻和暖如春责球,著一層夾襖步出監(jiān)牢的瞬間焦履,已是汗流浹背拓劝。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘉裤,地道東北人郑临。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像屑宠,于是被迫代替她去往敵國和親厢洞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理典奉,服務(wù)發(fā)現(xiàn)躺翻,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 一卫玖、簡(jiǎn)介 Retrofit是Square公司開發(fā)的一款針對(duì)Android網(wǎng)絡(luò)請(qǐng)求的框架公你,Retrofit2底層基于...
    Devil不加V閱讀 547評(píng)論 0 0
  • 你見,或者不見我 我就在那里 不悲不喜 你念假瞬,或者不念我 情就在那里 不來不去 你愛陕靠,或者不愛我 愛就在那里 不增不減
    逍遙_9353閱讀 199評(píng)論 0 3
  • 一直都想減肥剪芥,每一次努力聚集起的勇氣卻都被惰性打敗。 前段時(shí)間和朋友外出琴许,閑來無聊税肪,朝四周看,偶然看見一位帥...
    梁上_閱讀 242評(píng)論 0 1
  • 第二十七 不哭死神 第二天虚吟。 風(fēng)云會(huì)寸认。 風(fēng)云殿。 這是一座年久失修十分陰森恐怖的大殿串慰。 殿里灰塵寸厚偏塞,蛛網(wǎng)密布,老...
    狼神2019閱讀 345評(píng)論 4 12