網(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依賴包

}

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

2.使用示例:

淘寶查詢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”

}

編寫實(shí)體類,IpModel ?(包含響應(yīng)碼和IpData數(shù)據(jù)實(shí)體類)和IpData實(shí)體類,代碼就不放了。

網(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ù)類型,這里我們支持String和Gson類型

用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è)查詢參數(shù)

public interface IpService{? ?

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

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

}

@QueryMap:多個(gè)查詢參數(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:一起使用,提供查詢主體內(nèi)容,其中ApiInfo是一個(gè)bean類

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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容