本篇內(nèi)容主要講解“怎么使用Android Retrofit”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么使用Android Retrofit”吧!
成都創(chuàng)新互聯(lián)專(zhuān)注于鳳陽(yáng)企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城網(wǎng)站開(kāi)發(fā)。鳳陽(yáng)網(wǎng)站建設(shè)公司,為鳳陽(yáng)等地區(qū)提供建站服務(wù)。全流程按需開(kāi)發(fā),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
關(guān)于Retrofit的學(xué)習(xí),我算是比較晚的了,而現(xiàn)在Retrofit已經(jīng)是Android非常流行的網(wǎng)絡(luò)請(qǐng)求框架了。之前,我沒(méi)有學(xué)過(guò)Retrofit,但最近公司的新項(xiàng)目使用了Retrofit、Rxjava和OkHttp來(lái)進(jìn)行封裝,使用起來(lái)非常簡(jiǎn)便,增加代碼的美觀程度,也降低了耦合度,這是一個(gè)非常棒的框架,特別是這三者一起使用。
簡(jiǎn)介
Retrofit是Square公司開(kāi)發(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)單的,而且邏輯思路也比較清晰,所以開(kāi)發(fā)者是很容易上手的。
添加依賴(lài)
build.gradle文件的dependencies下添加以下依賴(lài):
復(fù)制代碼 代碼如下:
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0'
上面除了添加Retrofit依賴(lài),還添加了gson依賴(lài),來(lái)解析請(qǐng)求得到的json數(shù)據(jù)。
定義使用的數(shù)據(jù)集合
class Result{ var status: Int? = -1//請(qǐng)求結(jié)果 lateinit var message: String; var content :T?= null }
這是返回結(jié)果的集合,使用了kotlin來(lái)寫(xiě)
class Content { var name: String?= null var mobile :String?= null var address :String?= null }
需要的內(nèi)容集合類(lèi)
請(qǐng)求
需要一個(gè)接口,并且編寫(xiě)請(qǐng)求的方法
interface HttpService { @GET("index.php?m=Api&c=User&a=userInfo") fun getUserInfo(): Call> }
調(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> call = service.getUserInfo(); call.enqueue(new Callback >() { @Override public void onResponse(Call > call, Response > response) { Log.i("tag", response.body().getContent().getName()); } @Override public void onFailure(Call > call, Throwable t) { Log.i("tag", "失敗"); } }); }
以上就是Retrofit的get請(qǐng)求方式。GET請(qǐng)求需要在請(qǐng)求方法之前添加一個(gè)GET注解來(lái)標(biāo)明這是一個(gè)GET請(qǐng)求,同樣,如果是POST請(qǐng)求需要一個(gè)POST注解。
@POST
POST請(qǐng)求,需要添加一個(gè)@POST的注解,并且需要還需要使用@FormUrlEncoded 注解來(lái)表明,這是一個(gè)表單,使用@Field注解,傳入表單需要的參數(shù)。
@FormUrlEncoded //表單 @POST("index.php?m=Api&c=User&a=userInfo") fun getUserInfo( @Field("user_id") user_id: String //參數(shù) ): Observable> //返回?cái)?shù)據(jù)類(lèi)型
@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>
@Path
使用@Path可以動(dòng)態(tài)的配置URL地址。
@GET("{path/}{index.php?m=Api&c=User&a=userInfo") fun getUserInfo(@Path("path")path: String): Call>
@Query
@Query即動(dòng)態(tài)指定查詢(xún)條件
@GET("ajax.php") fun getInfo(@Query("id")id: String): Call>
@Query是查詢(xún)單一的條件,但是如果是多個(gè)條件的話,就不適用了,那么就需要用到@QueryMap注解。@QueryMap就是動(dòng)態(tài)指定查詢(xún)條件組。
文件上傳
使用@Part注解來(lái)表示單個(gè)文件上傳,而@PartMap注解跟單文件上傳是類(lèi)似的,是不過(guò)是使用了Map集合來(lái)封裝了上傳的文件,即多文件上傳。
除了以上的注解,還有@Header,即表示加入消息報(bào)頭,因?yàn)樵趆ttp請(qǐng)求的時(shí)候,為了防止攻擊、過(guò)濾不安全的訪問(wèn)和添加特殊加密的訪問(wèn)來(lái)保證安全,需要在消息報(bào)頭中攜帶一些特殊的消息處理,而在Retrofix中使用@Header即可實(shí)現(xiàn)添加消息報(bào)頭。
從上面的Retrofix實(shí)踐和注解的講解中,我們知道使用Retrofix可以很簡(jiǎn)單的,而且代碼邏輯比較清晰的做http請(qǐng)求,其提供非常多的注解來(lái)給開(kāi)發(fā)者使用,簡(jiǎn)化了代碼。
到此,相信大家對(duì)“怎么使用Android Retrofit”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)。