1牲蜀、前言
- 在
Android
中仰禽,網(wǎng)絡(luò)請求是必不可少的; - 目前
Retrofit
是Android
開發(fā)比較流行的網(wǎng)絡(luò)請求框架祝高,其操作性強栗弟、可擴展性好、代碼風(fēng)格簡潔明了的優(yōu)點幫助開發(fā)者事半功倍工闺;
2乍赫、定義
一個Restful
設(shè)計風(fēng)格的HTTP
網(wǎng)絡(luò)請求框架,基于okhttp
;
3陆蟆、功能
- 基于
okhttp
雷厂,遵循Restful API
設(shè)計風(fēng)格; - 通過注解配置網(wǎng)絡(luò)請求參數(shù)叠殷;
- 支持同步改鲫、異步網(wǎng)絡(luò)請求;
- 支持多種數(shù)據(jù)的解析、序列化格式(
GSON
像棘、JSON
稽亏、XML
、Protobuf
)缕题; - 提供對
RxJava
支持截歉;
4、優(yōu)點
-
功能強大:支持同步烟零、異步瘪松,支持多種數(shù)據(jù)的解析、序列化格式锨阿,支持
RxJava
凉逛; - 簡單易用:通過注解配置網(wǎng)絡(luò)請求參數(shù),采用大量設(shè)計模式簡化使用群井;
-
可擴展性好:功能模塊高度封裝,解耦徹底毫胜,如自定義
Converters
书斜; -
應(yīng)用場景:任何網(wǎng)絡(luò)請求的需求場景都應(yīng)優(yōu)先選擇,特別是后臺
API
遵循Rest API
設(shè)計風(fēng)格酵使,并且項目中使用到RxJava
的荐吉;
注:
Retrofit
是一個遵循Restful
風(fēng)格的網(wǎng)絡(luò)請求框架的封裝,原因是網(wǎng)絡(luò)請求的核心是okhttp
來完成口渔,而Retrofit
僅負責(zé)網(wǎng)絡(luò)請求接口的封裝样屠,APP
應(yīng)用程序通過Retrofit
請求網(wǎng)絡(luò),實際上是使用Retrofit
接口層封裝參數(shù)缺脉、header
痪欲、url
等信息,之后由okhttp
完成請求網(wǎng)絡(luò)的操作攻礼,在服務(wù)器返回數(shù)據(jù)之后业踢,okhttp
將原始的結(jié)果交給retrofit
,retrofit
再根據(jù)開發(fā)者需要進行數(shù)據(jù)解析礁扮;
5知举、使用步驟
- 1、添加
Retrofit
庫的依賴 - 2太伊、創(chuàng)建接收服務(wù)器返回的數(shù)據(jù)的類
- 3雇锡、創(chuàng)建用于描述網(wǎng)絡(luò)請求的接口
- 4、創(chuàng)建
Retrofit
的實例 - 5僚焦、創(chuàng)建網(wǎng)絡(luò)請求接口實例并配置網(wǎng)絡(luò)請求參數(shù)
- 6锰提、發(fā)送網(wǎng)絡(luò)請求(異步/同步)
5.1、在gradle加入Retrofit依賴庫
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
不要忘記添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
5.2、創(chuàng)建接收服務(wù)器返回數(shù)據(jù)的實體類Bean.java
package com.qinkl.retrofitdemo;
public class Bean {
public String code;
public String message;
}
5.3欲账、創(chuàng)建用于描述網(wǎng)絡(luò)請求的接口
RxJava
將http
請求抽象成Java
接口屡江,采用注解的方式描述網(wǎng)絡(luò)請求的參數(shù)和配置網(wǎng)絡(luò)請求的相關(guān)信息
用動態(tài)代理方式動態(tài)將該接口翻譯成一個HTTP
請求,最后在執(zhí)行HTTP
請求
接口的每個方法的參數(shù)都需要使用注解來標(biāo)注赛不,否則會報錯
創(chuàng)建接口文件MyApiService.java
package com.qinkl.retrofitdemo;
import retrofit2.Call;
import retrofit2.http.GET;
public interface MyApiService {
@GET("openapi.do?keyfrom=Yanzhikai&key=2032414398&type=data&doctype=json&version=1.1&q=car")
Call<Bean> getCall();
}
5.4惩嘉、創(chuàng)建Retrofit實例
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.build();
由于這里運用了GsonConverterFactory
,所以要在gradle
引入依賴包:
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
5.5踢故、創(chuàng)建網(wǎng)絡(luò)請求接口實例和配置網(wǎng)絡(luò)請求參數(shù)相關(guān)信息
MyApiService service = retrofit.create(MyApiService.class);
5.6文黎、發(fā)送網(wǎng)絡(luò)請求
Call<Bean> call = service.getCall();
call.enqueue(new Callback<Bean>() {
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {
response.body().show();
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {
Log.i("MainActivity","請求失敗");
}
});
6、總結(jié)
- 通過本文殿较,相信你一定對
Retrofit
的使用有了一定的了解耸峭; - 不過不僅僅要知道怎么用,還要明白其原理和工作過程淋纲,才能更好的掌握
Retrofit
的設(shè)計精髓;