Android Retrofit2是什么典予?
Android Retrofit2是一個(gè)安全的為Android和Java開發(fā)的Http訪問(wèn)框架窍奋,它是對(duì)OkHttp的進(jìn)一步封裝,它對(duì)應(yīng)的的git地址和官網(wǎng)如下:
- github地址:https://github.com/square/retrofit
- 官網(wǎng):http://square.github.io/retrofit/
Android Retrofit2能解決什么問(wèn)題碱蒙?
- 不需要自己封裝具體的Http請(qǐng)求挪凑,線程切換以及數(shù)據(jù)轉(zhuǎn)換等等
- 接口統(tǒng)一配置定義孕索,且通過(guò)注解的方式設(shè)置參數(shù),代碼清晰躏碳,便于維護(hù)管理
- 可以與RxJava很輕松的關(guān)聯(lián)使用
- 通過(guò)添加各種轉(zhuǎn)換類搞旭,能講response直接轉(zhuǎn)換為需要的對(duì)象
Android Retrofit2具體該怎么使用?
一菇绵、導(dǎo)入依賴包
- IDE和構(gòu)建工具:androidstudio Gradle
- retrofit2版本號(hào):2.3.0
找到gradle配置文件build.gradle(Module:app),注意是app的配置文件肄渗,然后在dependencies添加如下配置,然后如下圖所示點(diǎn)擊sync咬最,重新下載并導(dǎo)入依賴的retrofit2包恳啥,需要導(dǎo)入3個(gè)包,下面兩個(gè)需要用來(lái)將Response數(shù)據(jù)進(jìn)行Gson轉(zhuǎn)換或者String轉(zhuǎn)化丹诀。
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'//ConverterFactory的Gson依賴包
compile 'com.squareup.retrofit2:converter-scalars:2.3.0'//ConverterFactory的String依賴包
二钝的、在manifest文件中申明網(wǎng)絡(luò)訪問(wèn)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
三、創(chuàng)建Po對(duì)象
這邊我使用網(wǎng)上找的百度天氣的一個(gè)API接口:http://api.map.baidu.com/telematics/v3/weather?location=廣州&output=JSON&ak=FK9mkfdQsloEngodbFl4FeY3
此接口的返回值如下
{"status":201,"message":"APP被用戶自己禁用铆遭,請(qǐng)?jiān)诳刂婆_(tái)解禁"}
所以我這邊先定義了一個(gè)PO對(duì)象POWeather來(lái)封裝這個(gè)Response消息硝桩。
public class POWeather {
private String status;
private String message;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
四毛萌、定義API的interface接口
這個(gè)接口的這個(gè)部分telematics/v3/weather?location=廣州&output=JSON&ak=FK9mkfdQsloEngodbFl4FeY3掂恕,通過(guò)創(chuàng)建如下的interface的getWeather表示
public interface ApiService {
@GET("/telematics/v3/weather")
Call<POWeather> getWeather (@Query("location") String location, @Query("output") String ouput, @Query("ak") String ak);
五生棍、創(chuàng)建Retrofit實(shí)例
我們創(chuàng)建一個(gè)Retrofit實(shí)例蝶桶,來(lái)準(zhǔn)備調(diào)用API毕贼,其中baseUrl是這個(gè)接口的Root地址齐媒,addConverterFactory用來(lái)增加返回值轉(zhuǎn)化為Gson對(duì)象栋猖,addConverterFactory用來(lái)增加返回值轉(zhuǎn)化為String對(duì)象叨咖。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.map.baidu.com/")
//增加返回值為Gson的支持(以實(shí)體類返回)
.addConverterFactory(ScalarsConverterFactory.create())
//增加返回值為Gson的支持(以實(shí)體類返回)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApiService service = retrofit.create(ApiService.class);
六害碾、調(diào)用API接口
通過(guò)如下代碼開始訪問(wèn)此API接口矢劲,訪問(wèn)成功通過(guò)Log輸出到控制臺(tái)
Call<POWeather> weather = service.getWeather("廣州","JSON","FK9mkfdQsloEngodbFl4FeY3");
weather.enqueue(new Callback<POWeather>() {
@Override
public void onResponse(Call<POWeather> call, Response<POWeather> response) {
Log.e("test",response.body().getMessage());
}
@Override
public void onFailure(Call<POWeather> call, Throwable t) {
}
});
輸出消息成功如下: