Android Retrofit的使用詳解
關(guān)于Retrofit的學(xué)習(xí),我算是比較晚的了,而現(xiàn)在Retrofit已經(jīng)是Android非常流行的網(wǎng)絡(luò)請(qǐng)求框架了。之前,我沒有學(xué)過Retrofit,但最近公司的新項(xiàng)目使用了Retrofit、Rxjava和OkHttp來進(jìn)行封裝,使用起來非常簡(jiǎn)便,增加代碼的美觀程度,也降低了耦合度,這是一個(gè)非常棒的框架,特別是這三者一起使用。
簡(jiǎn)介
Retrofit是Square公司開發(fā)的一款針對(duì)Android網(wǎng)絡(luò)請(qǐng)求的框架,現(xiàn)在已經(jīng)更新到2.3版本了。Retrofit的最大特點(diǎn)是使用運(yùn)行時(shí)注解的方式提供功能。
Retrofit的使用
關(guān)于Retrofit的使用,其實(shí)還是很簡(jiǎn)單的,而且邏輯思路也比較清晰,所以開發(fā)者是很容易上手的。
添加依賴
build.gradle文件的dependencies下添加以下依賴:
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0'
上面除了添加Retrofit依賴,還添加了gson依賴,來解析請(qǐng)求得到的json數(shù)據(jù)。
定義使用的數(shù)據(jù)集合
class Result <T>{
var status: Int? = -1//請(qǐng)求結(jié)果
lateinit var message: String;
var content :T?= null
}
這是返回結(jié)果的集合,使用了kotlin來寫
class Content {
var name: String?= null
var mobile :String?= null
var address :String?= null
}
需要的內(nèi)容集合類
請(qǐng)求
需要一個(gè)接口,并且編寫請(qǐng)求的方法
interface HttpService {
@GET("index.php?m=Api&c=User&a=userInfo")
fun getUserInfo(): Call<Result<Content>>
}
調(diào)用請(qǐng)求
private void request() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://one.sinalwj.cn//")
.addConverterFactory(GsonConverterFactory.create())
.build();
HttpService service = retrofit.create(HttpService.class);
Call<Result<Content>> call = service.getUserInfo();
call.enqueue(new Callback<Result<Content>>() {
@Override
public void onResponse(Call<Result<Content>> call, Response<Result<Content>> response) {
Log.i("tag", response.body().getContent().getName());
}
@Override
public void onFailure(Call<Result<Content>> call, Throwable t) {
Log.i("tag", "失敗");
}
});
}
以上就是Retrofit的get請(qǐng)求方式。GET請(qǐng)求需要在請(qǐng)求方法之前添加一個(gè)GET注解來標(biāo)明這是一個(gè)GET請(qǐng)求,同樣,如果是POST請(qǐng)求需要一個(gè)POST注解。

@POST
POST請(qǐng)求,需要添加一個(gè)@POST的注解,并且需要還需要使用@FormUrlEncoded 注解來表明,這是一個(gè)表單,使用@Field注解,傳入表單需要的參數(shù)。
@FormUrlEncoded //表單
@POST("index.php?m=Api&c=User&a=userInfo")
fun getUserInfo(
@Field("user_id") user_id: String //參數(shù)
): Observable<BaseResult<User>> //返回?cái)?shù)據(jù)類型
@Body
@Body注解是針對(duì)POST的請(qǐng)求方式,如傳輸數(shù)據(jù)JSON格式
class Content {
var name: String?= null
lateinit var sn:SN
class SN{
var out :String ?= null
var errNo :Int ?= -1
}
}
@GET("ajax.php")
fun getInfo(@Body content: Content): Call<Result<Content>>
@Path
使用@Path可以動(dòng)態(tài)的配置URL地址。
@GET("{path/}{index.php?m=Api&c=User&a=userInfo")
fun getUserInfo(@Path("path")path: String): Call<Result<Content>>
@Query
@Query即動(dòng)態(tài)指定查詢條件
@GET("ajax.php")
fun getInfo(@Query("id")id: String): Call<Result<Content>>
@Query是查詢單一的條件,但是如果是多個(gè)條件的話,就不適用了,那么就需要用到@QueryMap注解。@QueryMap就是動(dòng)態(tài)指定查詢條件組。
文件上傳
使用@Part注解來表示單個(gè)文件上傳,而@PartMap注解跟單文件上傳是類似的,是不過是使用了Map集合來封裝了上傳的文件,即多文件上傳。
除了以上的注解,還有@Header,即表示加入消息報(bào)頭,因?yàn)樵趆ttp請(qǐng)求的時(shí)候,為了防止攻擊、過濾不安全的訪問和添加特殊加密的訪問來保證安全,需要在消息報(bào)頭中攜帶一些特殊的消息處理,而在Retrofix中使用@Header即可實(shí)現(xiàn)添加消息報(bào)頭。
從上面的Retrofix實(shí)踐和注解的講解中,我們知道使用Retrofix可以很簡(jiǎn)單的,而且代碼邏輯比較清晰的做http請(qǐng)求,其提供非常多的注解來給開發(fā)者使用,簡(jiǎn)化了代碼。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程之截屏實(shí)現(xiàn)方法(包括scrollview與listview)
這篇文章主要介紹了Android編程之截屏實(shí)現(xiàn)方法,包括截取scrollview與listview屏幕的相關(guān)技巧,以及截屏圖片的生成與保存技巧,需要的朋友可以參考下2015-11-11
Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果
這篇文章主要介紹了Android使用CountDownTimer實(shí)現(xiàn)倒數(shù)定時(shí)器效果的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02
kotlin 注解 @Parcelize 使用示例和步驟詳解
Parcelable 接口是 Android 中用于在組件之間傳遞對(duì)象的一種方式,在 Kotlin 中,@Parcelize 注解用于簡(jiǎn)化實(shí)現(xiàn) Android Parcelable 接口的過程,本文給大家分享kotlin 注解 @Parcelize 使用示例,感興趣的朋友一起看看吧2024-06-06
Android 自定義 HorizontalScrollView 打造多圖片OOM 的橫向滑動(dòng)效果(實(shí)例代碼)
這篇文章主要介紹了Android 自定義 HorizontalScrollView 打造多圖片OOM 的橫向滑動(dòng)效果(實(shí)例代碼),需要的朋友可以參考下2017-10-10
Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔
今天小編就為大家分享一篇關(guān)于Android Usb設(shè)備的監(jiān)聽(Dev)外設(shè)端口的判定以及耳機(jī)的插拔,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
深入解析Android App開發(fā)中Context的用法
這篇文章主要介紹了深入解析Android App開發(fā)中Context的用法,包括Context的創(chuàng)建場(chǎng)景和Context對(duì)資源的訪問等內(nèi)容,需要的朋友可以參考下2016-02-02

