Retrofit簡(jiǎn)介
Retrofit是Square公司開發(fā)的一個(gè)Android和Java的REST客戶端庫(kù),官方的解釋是一個(gè)針對(duì)Android和Java類型安全的http客戶端,通俗的來說Retrofit是一個(gè)應(yīng)用在Android中,用來請(qǐng)求網(wǎng)絡(luò)的第三方庫(kù),它的本質(zhì)是對(duì)okhttp進(jìn)行了封裝,使我們的開發(fā)更為簡(jiǎn)便高效.
環(huán)境搭建
- 官網(wǎng)地址:http://square.github.io/retrofit/
- GitHub地址:https://github.com/square/retrofit
- 相關(guān)jar包的下載:https://github.com/square/retrofit/tree/master/retrofit-converters到各自對(duì)應(yīng)目錄下進(jìn)行下載
- jar包導(dǎo)入
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:converter-scalars:2.2.0'
- 導(dǎo)入后確保有以下jar包即可
converter-gson-2.2.0.jar匹耕、 converter-scalars-2.2.0.jar幌氮、 gson-2.7.jar立帖、
okhttp-3.7.0.jar狂芋、 okio-1.12.0.jar俩块、 retrofit-2.2.0.jar
使用步驟
1.創(chuàng)建用于接收的返回JSON數(shù)據(jù)的實(shí)體類:Entity
2.創(chuàng)建一個(gè)接口來管理請(qǐng)求的URL:EntityService
3.通過創(chuàng)建Retrofit類來幫我們自動(dòng)實(shí)現(xiàn)接口的實(shí)現(xiàn)類
4.調(diào)用實(shí)現(xiàn)類里的方法可以同步或異步HTTP請(qǐng)求到遠(yuǎn)程服務(wù)器,并得到Call對(duì)象
5.調(diào)用Call里的方法去獲取響應(yīng)數(shù)據(jù)
入門案例
請(qǐng)求的url:http://10.8.29.49:8080/test/user!getUser
請(qǐng)求參數(shù):loginCode
返回的json數(shù)據(jù):
{"username":"小明","password":"1234","address":"地球"}
創(chuàng)建實(shí)體類User
public class User {
private String name;
private String password;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
解釋:創(chuàng)建這個(gè)實(shí)體類就是用來把接收到的json數(shù)據(jù)轉(zhuǎn)成對(duì)象的,用過Gson的都知道,這里就不過多贅述了...
創(chuàng)建用于獲取數(shù)據(jù)的UserService
public interface UserService {
@GET("user!getData")
Call<User> getUser(@Query("loginCode") String loginCode);
}
解釋:@GET("user!getData"),表示以get方式請(qǐng)求,里面?zhèn)魅胍粋€(gè)相對(duì)或絕對(duì)路徑;@Query("loginCode"),附加到url的查詢參數(shù),loginCode表示key;
String loginCode即是value
用Retrofit來請(qǐng)求網(wǎng)絡(luò)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.8.29.49:8080/test/")
.addConverterFactory(GsonConverterFactory.create())
.build();
//用retrofit來創(chuàng)建UserService的實(shí)現(xiàn)類
UserService userService = retrofit.create(UserService.class);
//傳入我們請(qǐng)求的參數(shù)值
Call<User> data = UserService.getUser("xiaoming");
//異步發(fā)送請(qǐng)求
data.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
//獲取返回?cái)?shù)據(jù)
Log.e("response",response.body().getName());
}
@Override
public void onFailure(Call<User> call, Throwable throwable) {
throwable.printStackTrace();
}
});
解釋:baseUrl設(shè)置基本url,這里的url和service中的@get里的值組成完整的訪問路徑;
addConverterFactory添加轉(zhuǎn)換器,可以讓返回值以此類型進(jìn)行解析,這里添加的是以Gson方式解析,可以添加多個(gè)轉(zhuǎn)換器