Android Retrofit的使用詳解
關(guān)于Retrofit的學(xué)習(xí),我算是比較晚的了,而現(xiàn)在Retrofit已經(jīng)是Android非常流行的網(wǎng)絡(luò)請求框架了。之前,我沒有學(xué)過Retrofit,但最近公司的新項目使用了Retrofit、Rxjava和OkHttp來進行封裝,使用起來非常簡便,增加代碼的美觀程度,也降低了耦合度,這是一個非常棒的框架,特別是這三者一起使用。
簡介
Retrofit是Square公司開發(fā)的一款針對Android網(wǎng)絡(luò)請求的框架,現(xiàn)在已經(jīng)更新到2.3版本了。Retrofit的最大特點是使用運行時注解的方式提供功能。
Retrofit的使用
關(guān)于Retrofit的使用,其實還是很簡單的,而且邏輯思路也比較清晰,所以開發(fā)者是很容易上手的。
添加依賴
build.gradle文件的dependencies下添加以下依賴:
compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:2.3.0'
上面除了添加Retrofit依賴,還添加了gson依賴,來解析請求得到的json數(shù)據(jù)。
定義使用的數(shù)據(jù)集合
class Result <T>{ var status: Int? = -1//請求結(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)容集合類
請求
需要一個接口,并且編寫請求的方法
interface HttpService { @GET("index.php?m=Api&c=User&a=userInfo") fun getUserInfo(): Call<Result<Content>> }
調(diào)用請求
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請求方式。GET請求需要在請求方法之前添加一個GET注解來標明這是一個GET請求,同樣,如果是POST請求需要一個POST注解。
@POST
POST請求,需要添加一個@POST的注解,并且需要還需要使用@FormUrlEncoded 注解來表明,這是一個表單,使用@Field注解,傳入表單需要的參數(shù)。
@FormUrlEncoded //表單 @POST("index.php?m=Api&c=User&a=userInfo") fun getUserInfo( @Field("user_id") user_id: String //參數(shù) ): Observable<BaseResult<User>> //返回數(shù)據(jù)類型
@Body
@Body注解是針對POST的請求方式,如傳輸數(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可以動態(tài)的配置URL地址。
@GET("{path/}{index.php?m=Api&c=User&a=userInfo") fun getUserInfo(@Path("path")path: String): Call<Result<Content>>
@Query
@Query即動態(tài)指定查詢條件
@GET("ajax.php") fun getInfo(@Query("id")id: String): Call<Result<Content>>
@Query是查詢單一的條件,但是如果是多個條件的話,就不適用了,那么就需要用到@QueryMap注解。@QueryMap就是動態(tài)指定查詢條件組。
文件上傳
使用@Part注解來表示單個文件上傳,而@PartMap注解跟單文件上傳是類似的,是不過是使用了Map集合來封裝了上傳的文件,即多文件上傳。
除了以上的注解,還有@Header,即表示加入消息報頭,因為在http請求的時候,為了防止攻擊、過濾不安全的訪問和添加特殊加密的訪問來保證安全,需要在消息報頭中攜帶一些特殊的消息處理,而在Retrofix中使用@Header即可實現(xiàn)添加消息報頭。
從上面的Retrofix實踐和注解的講解中,我們知道使用Retrofix可以很簡單的,而且代碼邏輯比較清晰的做http請求,其提供非常多的注解來給開發(fā)者使用,簡化了代碼。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 中IntentFilter的匹配規(guī)則實例詳解
這篇文章主要介紹了Android 中IntentFilter的匹配規(guī)則實例詳解的相關(guān)資料,希望通過本文大家能了解掌握IntentFilter的匹配規(guī)則問題,需要的朋友可以參考下2017-09-09Flutter實現(xiàn)自定義搜索框AppBar的示例代碼
開發(fā)中,頁面頭部為搜索樣式的設(shè)計非常常見,為了可以像系統(tǒng)AppBar那樣使用,本文將利用Flutter自定義一個搜索框,感興趣的可以了解一下2022-04-04Android中Activity啟動默認不顯示輸入法解決方法
這篇文章主要介紹了Android中Activity啟動默認不顯示輸入法解決方法,一般是因為包含checkbox控件導(dǎo)致Activity啟動默認不顯示輸入法,本文給出了正確解決方法,需要的朋友可以參考下2015-06-06android開發(fā)之關(guān)閉所有的activity的方法
本篇文章主要介紹了android開發(fā)之關(guān)閉所有的activity的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12c++ mk文件出錯Jni調(diào)用產(chǎn)生java.lang.UnsatisfiedLinkError錯誤解決方法
錯誤產(chǎn)生在我把方法從c語言轉(zhuǎn)為c++語言后產(chǎn)生的,后來檢查到這種錯誤是因為mk文件出錯,加載c文件和加載c++的文件所用的代碼不一樣,下面請看2013-11-11