Retrofit網(wǎng)絡(luò)庫

網(wǎng)課鏈接

一沙郭、Retrofit介紹

簡介:
  • Retrofit是Square公司基于RESTful風(fēng)格推出的網(wǎng)絡(luò)框架封裝
  • Retrofit與OKHttp的關(guān)系:
    ?Retrofit是基于OKHttp的網(wǎng)絡(luò)請求的二次封裝督惰,其本質(zhì)仍是OKHttp
  • Retrofit庫包結(jié)構(gòu)
與其它網(wǎng)絡(luò)庫的對比:
  • AndroidAsynHttp
    ?基于HttpClient枪眉,作者已停止維護(hù)服球,Android5.0不再使用HttpClient因此不推薦使用挖诸。
  • Volley:
    ?基于HttpUrlConnection任柜,Google官方推出枫笛,只適合輕量級網(wǎng)絡(luò)交互如數(shù)據(jù)傳輸小吨灭,不適合大文件上傳下載場景。
Retrofit優(yōu)點(diǎn):
  • API設(shè)計(jì)簡潔易用崇堰,注解化配置高度解耦沃于、支持多種解析器、支持Rxjava海诲。

二繁莹、Retrofit使用

Step1:
?Retrofit開源庫、OkHttp網(wǎng)絡(luò)庫特幔、數(shù)據(jù)解析器集成咨演、注冊網(wǎng)絡(luò)權(quán)限 。

  • 依賴包導(dǎo)入
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.okhttp3:okhttp:3.12.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'

?maven方式:

    <dependency>
      <groupId>com.squareup.retrofit2</groupId>
      <artifactId>retrofit</artifactId>
      <version>2.4.0</version>
    </dependency>
  • 添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET" />

Step2:
?創(chuàng)建接口設(shè)置請求類型與參數(shù)蚯斯。

//所需解析json對應(yīng)的類
public class UserInfoModel {

    public String code;  //屬性

}

//接口
public interface UserMgrService {

    @GET("login")
    Call<UserInfoModel> login(@Query("username") String username, @Query("pwd") String password);

}

Step3:
?創(chuàng)建Retrofit對象薄风、設(shè)置數(shù)據(jù)解析器。

    //創(chuàng)建Retrofit對象  注意url后面有一個(gè)'/'拍嵌。
    Retrofit retrofit = new Retrofit.Builder().baseUrl("http://localhost:8080/")
                        .addConverterFactory(GsonConverterFactory.create()).build();

Step4:
?生成接口對象遭赂。

    // 獲取UserMgrService對象
    UserMgrService userMgrService = retrofit.create(UserMgrService.class);

Step5:
?調(diào)用接口方法返回Call對象。

    //調(diào)用login
    final Call<UserInfoModel> call = userMgrService.login("admin", "admin");

Step6:
?發(fā)送請求(同步横辆、異步)撇他。

  • 同步:調(diào)用Call對象的execute(),返回結(jié)果的響應(yīng)體
  • 異步:調(diào)用Call對象的enqueue()狈蚤,參數(shù)是一個(gè)回調(diào)
    //同步請求
    Response<UserInfoModel> response = call.execute();  

    //異步請求
    call.enqueue(new Callback<UserInfoModel>() {
           @Override
           public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {

           }

           @Override
           public void onFailure(Call<UserInfoModel> call, Throwable t) {

           }
   });

Step7:
?處理返回?cái)?shù)據(jù)困肩。

   //發(fā)送請求

   //同步請求需要開啟新線程執(zhí)行,否則會(huì)報(bào)錯(cuò)
   new Thread(new Runnable() {
         @Override
         public void run() {
              Response<UserInfoModel> response = null;
              try {
                    response = call.execute();
              } catch (IOException e) {
                    e.printStackTrace();
              }
                   System.out.println("code:" + response.body().code);
         }
  }).start();


    //異步請求
    call.enqueue(new Callback<UserInfoModel>() {
           @Override
           public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {

           }

           @Override
           public void onFailure(Call<UserInfoModel> call, Throwable t) {

           }
   });

Step3-7:

    //創(chuàng)建Retrofit對象  注意url后面有一個(gè)'/'脆侮。
    Retrofit retrofit = new Retrofit.Builder().baseUrl("http://localhost:8080/")
                    .addConverterFactory(GsonConverterFactory.create()).build();
    // 獲取UserMgrService對象
    UserMgrService userMgrService = retrofit.create(UserMgrService.class);
    //調(diào)用login
    final Call<UserInfoModel> call = userMgrService.login("admin", "admin");
    //異步請求
    call.enqueue(new Callback<UserInfoModel>() {
           @Override
           public void onResponse(Call<UserInfoModel> call, >Response<UserInfoModel> response) {

          }

           @Override
           public void onFailure(Call<UserInfoModel> call, Throwable t) {

           }
   });

常見參數(shù)注解:

    @GET,@POST : 確定請求方式
    @Path : 請求URL的字符替代
    @Query:要傳遞的參數(shù)
    @QueryMap:包含多個(gè)@Query注解參數(shù)
    @body:添加實(shí)體類對象
    @FormUrlEncoded:URL編碼

三锌畸、總結(jié)

  • Retrofit是基于Okhttp網(wǎng)絡(luò)庫的高級封裝。
  • 采用紓解靖避、網(wǎng)絡(luò)請求參數(shù)配置更靈活潭枣,擴(kuò)展性更好比默。
  • RESTful風(fēng)格的API優(yōu)先選用Retrofit。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卸耘,一起剝皮案震驚了整個(gè)濱河市退敦,隨后出現(xiàn)的幾起案子粘咖,更是在濱河造成了極大的恐慌蚣抗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓮下,死亡現(xiàn)場離奇詭異翰铡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讽坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門锭魔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人路呜,你說我怎么就攤上這事迷捧。” “怎么了胀葱?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵漠秋,是天一觀的道長。 經(jīng)常有香客問我抵屿,道長庆锦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任轧葛,我火速辦了婚禮搂抒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尿扯。我一直安慰自己求晶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布衷笋。 她就那樣靜靜地躺著芳杏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪右莱。 梳的紋絲不亂的頭發(fā)上蚜锨,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音慢蜓,去河邊找鬼亚再。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晨抡,可吹牛的內(nèi)容都是我干的氛悬。 我是一名探鬼主播则剃,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼如捅!你這毒婦竟也來了棍现?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤镜遣,失蹤者是張志新(化名)和其女友劉穎己肮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悲关,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谎僻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寓辱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘绍。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖秫筏,靈堂內(nèi)的尸體忽然破棺而出诱鞠,到底是詐尸還是另有隱情,我是刑警寧澤这敬,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布航夺,位于F島的核電站,受9級特大地震影響鹅颊,放射性物質(zhì)發(fā)生泄漏敷存。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一堪伍、第九天 我趴在偏房一處隱蔽的房頂上張望锚烦。 院中可真熱鬧,春花似錦帝雇、人聲如沸涮俄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彻亲。三九已至,卻和暖如春吮廉,著一層夾襖步出監(jiān)牢的瞬間苞尝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工宦芦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宙址,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓调卑,卻偏偏與公主長得像抡砂,于是被迫代替她去往敵國和親大咱。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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