網(wǎng)絡(luò)編程(五)

Retrofit:是Square公司開(kāi)發(fā)的一款針對(duì)Android網(wǎng)絡(luò)請(qǐng)求的框架羊苟,Retrofit2底層基于OkHttp實(shí)現(xiàn)的

1.使用前準(zhǔn)備

dependencies {

compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

compile 'com.squareup.retrofit2:converter-scalars:2.1.0'//ConverterFactory的String依賴(lài)包

}

當(dāng)然還有網(wǎng)絡(luò)權(quán)限尿招。

2.使用示例:

淘寶查詢(xún)IP地址的接口:/service/getIpInfo.PHP?ip=[ip地址字串]

返回的是(json格式的)國(guó)家 边翁、省(自治區(qū)或直轄市)、市(縣)、運(yùn)營(yíng)商。

{

“code”: 0,

”data”: {

“ip”: ”210.75.225.254”,

”country”: ”\u4e2d\u56fd”,

”area”: ”\u534e\u5317”,

“region”: ”\u5317\u4eac\u5e02”,

”city”: ”\u5317\u4eac\u5e02”,

”county”: ”“,

”isp”: ”\u7535\u4fe1”,

“country_id”: ”86”,

”area_id”: ”100000”,

”region_id”: ”110000”,

”city_id”: ”110000”,

“county_id”: ”-1”,

”isp_id”: ”100017”

}

編寫(xiě)實(shí)體類(lèi)垦巴,IpModel ?(包含響應(yīng)碼和IpData數(shù)據(jù)實(shí)體類(lèi))和IpData實(shí)體類(lèi),代碼就不放了铭段。

網(wǎng)絡(luò)請(qǐng)求接口:

public interface IpService{? ??

@GET("getIpInfo.php")? ??

Call getIpMsg(@Query("ip")String ip);

}

Retrofit提供的請(qǐng)求方式注解有@GET和@POST等骤宣,分別代表GET請(qǐng)求和POST請(qǐng)求,我們?cè)谶@里訪問(wèn)的界面是“getIpInfo.php”稠项。參數(shù)注解有@PATH和@Query等涯雅,@Query就是我們的請(qǐng)求的鍵值對(duì)的設(shè)置,在這里@Query(“ip”)代表鍵展运,“String ip”則代表值活逆。

創(chuàng)建Retrofit:

String url = "http://ip.taobao.com/service/";

Retrofit retrofit = new Retrofit.Builder()

.baseUrl(url)

//增加返回值為String的支持

.addConverterFactory(ScalarsConverterFactory.create())

.addConverterFactory(GsonConverterFactory.create())

.build();

這里的baseUrl加上之前@GET(“getIpInfo.php”)定義的參數(shù)形成完整的請(qǐng)求地址;addConverterFactory用于指定返回的參數(shù)數(shù)據(jù)類(lèi)型拗胜,這里我們支持String和Gson類(lèi)型

用Retrofit創(chuàng)建接口文件:

IpService ipService = retrofit.create(IpService.class);?

Call call=ipService.getIpMsg(ip);

用retrofit創(chuàng)建我們之前定義的IpService接口對(duì)象蔗候,并調(diào)用該接口定義的getIpMsg方法得到Call對(duì)象。拿到Call對(duì)象接下來(lái)就可以像OkHttp那樣訪問(wèn)網(wǎng)絡(luò)了埂软。前面兩篇文章有講過(guò)锈遥。

我們主要探索下retrofit的請(qǐng)求參數(shù)本身。

請(qǐng)求方法

請(qǐng)求方法除了上文講到的@GET勘畔,還有@POST所灸、@PUT、@DELETE炫七、@HEAD爬立、@OPTIONS、@PATCH万哪、@HTTP侠驯。其中@HTTP用來(lái)替換以上7個(gè)抡秆,其他的分別對(duì)應(yīng)著不同的Http的請(qǐng)求方法。

@Query:?jiǎn)蝹€(gè)查詢(xún)參數(shù)

public interface IpService{? ?

?@GET("getIpInfo.php")? ??

Call getIpMsg(@Query("ip")String ip);

}

@QueryMap:多個(gè)查詢(xún)參數(shù)

public interface BlueService {

?@GET("book/search")? ??

Call getSearchBooks(@QueryMap Mapoptions);

}

@Path:動(dòng)態(tài)的替換訪問(wèn)路徑

public interface ApiStores {? ?

?@GET("adat/sk/{cityId}.html")? ?

?Call getWeather(@Path("cityId") String cityId);

}

接口傳過(guò)來(lái)的參數(shù)會(huì)替換請(qǐng)求接口中{cityId}的值吟策,做到動(dòng)態(tài)的改變請(qǐng)求接口儒士。

@Body與@POST:一起使用,提供查詢(xún)主體內(nèi)容檩坚,其中ApiInfo是一個(gè)bean類(lèi)

public interface ApiStores {? ? ? ??

@POST("client/shipper/getCarType")? ? ? ??

Call getCarType(@Body ApiInfo apiInfo);

}

@Headers:設(shè)置網(wǎng)絡(luò)請(qǐng)求頭

interface SomeService {?

@GET("some/endpoint")?

@Headers("Accept-Encoding: application/json")?

Call getCarType();

}

這種是設(shè)置固定的請(qǐng)求頭着撩,當(dāng)然我們也可以設(shè)置動(dòng)態(tài)的,如下:

interface SomeService {?

@GET("some/endpoint")?

Call someEndpoint(@Header("Location") String location);

}

@Multipart:用來(lái)上傳文件

public interface FileUploadService {? ? ??

@Multipart? ??

@POST("upload")? ??

Call upload(@Part("description") RequestBody description,@Part MultipartBody.Part file);

}

大體的用法介紹完畢效床。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睹酌,一起剝皮案震驚了整個(gè)濱河市权谁,隨后出現(xiàn)的幾起案子剩檀,更是在濱河造成了極大的恐慌,老刑警劉巖旺芽,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪猴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡采章,警方通過(guò)查閱死者的電腦和手機(jī)运嗜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悯舟,“玉大人担租,你說(shuō)我怎么就攤上這事〉衷酰” “怎么了奋救?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)反惕。 經(jīng)常有香客問(wèn)我尝艘,道長(zhǎng),這世上最難降的妖魔是什么姿染? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任背亥,我火速辦了婚禮,結(jié)果婚禮上悬赏,老公的妹妹穿的比我還像新娘狡汉。我一直安慰自己,他們只是感情好闽颇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布盾戴。 她就那樣靜靜地躺著,像睡著了一般进萄。 火紅的嫁衣襯著肌膚如雪捻脖。 梳的紋絲不亂的頭發(fā)上锐峭,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音可婶,去河邊找鬼沿癞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛矛渴,可吹牛的內(nèi)容都是我干的椎扬。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼具温,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚕涤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铣猩,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揖铜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后达皿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體天吓,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年峦椰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了龄寞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汤功,死狀恐怖物邑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滔金,我是刑警寧澤色解,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站鹦蠕,受9級(jí)特大地震影響冒签,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钟病,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一萧恕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肠阱,春花似錦票唆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至噪伊,卻和暖如春簿煌,著一層夾襖步出監(jiān)牢的瞬間氮唯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工姨伟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惩琉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓夺荒,卻偏偏與公主長(zhǎng)得像瞒渠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子技扼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理伍玖,服務(wù)發(fā)現(xiàn),斷路器剿吻,智...
    卡卡羅2017閱讀 134,713評(píng)論 18 139
  • 前言 講完了Volley窍箍,我們接下來(lái)看看目前比較火的網(wǎng)絡(luò)框架OkHttp, 它處理了很多網(wǎng)絡(luò)疑難雜癥:會(huì)從很多常用...
    劉望舒閱讀 1,497評(píng)論 2 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法和橙,類(lèi)相關(guān)的語(yǔ)法仔燕,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法魔招,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,664評(píng)論 18 399
  • Retrofit是squareup公司的開(kāi)源力作,和同屬squareup公司開(kāi)源的OkHttp杆逗,一個(gè)負(fù)責(zé)網(wǎng)絡(luò)調(diào)度乡翅,...
    藍(lán)灰_q閱讀 41,624評(píng)論 23 281
  • 邊城還有那個(gè)翠翠和黃狗在等待那個(gè)端午給她送鴨子的人蠕蚜。 昔人已乘輕舟去,此地空于邊城夢(mèng)悔橄。 綠了多少翠靶累,荒了多少歲,相...
    逗霸君閱讀 446評(píng)論 0 7