簡介
Retrofit是Square開 發(fā)的一個(gè)Android和Java的REST客戶端庫斜友。這個(gè)庫非常簡單并且具有很多特性补鼻,相比其他的網(wǎng)絡(luò)庫胀葱,更容易讓初學(xué)者快速掌握懦底。它可以處理GET唇牧、 POST、PUT聚唐、DELETE...等請(qǐng)求
概述
1429351394587168.png
- ** POJO或模型實(shí)體類 : **從服務(wù)器獲取的JSON數(shù)據(jù)將被填充到這種類的實(shí)例中丐重。
public class UserModel {
private int id;
private String login;
private String avatar_url;
private String gravatar_id;
private String url;
...
}
- **接口 : **我們需要?jiǎng)?chuàng)建一個(gè)接口來管理像GET,POST…等請(qǐng)求的URL,這是一個(gè)服務(wù)類拱层。
public interface ApiService {
String BASE_API = "https://api.github.com";
@GET("/users")
Call<UserModel> getUser();
}
- **RestAdapter類 : **這是一個(gè)REST客戶端(RestClient)類弥臼,retrofit中默認(rèn)用的是Gson來解析JSON數(shù)據(jù),你也可以設(shè)置自己的JSON解析器根灯,比如jackson径缅,Gson等掺栅。
Retrofit retrofit=new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(ApiService.BASE_API)
.build();
ApiService service=retrofit.create(ApiService.class);
Call<UserModel> call = service.getUser();
call.enqueue(new Callback<UserModel>() {
@Override
public void onResponse(Call<UserModel> call, Response<UserModel> response) {
}
@Override
public void onFailure(Call<UserModel> call, Throwable t) {
}
});
Retrofit的使用
首先,在使用Retrofit之前還是老規(guī)矩纳猪,導(dǎo)包
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//只是使用retrofit不解析數(shù)據(jù)可以不導(dǎo)下面這個(gè)包
compile'com.squareup.retrofit2:converter-gson:2.1.0'
Retrofit支持的基本的HTTP請(qǐng)求
在Retrofit中使用注解的方式來區(qū)分請(qǐng)求類型.比如:
@GET("")表示一個(gè)GET請(qǐng)求,括號(hào)中的內(nèi)容為請(qǐng)求的地址.
格式 | 含義 |
---|---|
@GET | 表示這是一個(gè)GET請(qǐng)求 |
@POST | 表示這個(gè)一個(gè)POST請(qǐng)求 |
@PUT | 表示這是一個(gè)PUT請(qǐng)求 |
@DELETE | 表示這是一個(gè)DELETE請(qǐng)求 |
@HEAD | 表示這是一個(gè)HEAD請(qǐng)求 |
@OPTIONS | 表示這是一個(gè)OPTION請(qǐng)求 |
@PATCH | 表示這是一個(gè)PAT請(qǐng)求 |
Retrofit的簡單實(shí)現(xiàn)
直接請(qǐng)求型
1. 如果是直接請(qǐng)求某一地址:
@GET("/users")
Call<List<UserModel>> getUserList();
2.如果是組合后直接請(qǐng)求:
@GET("/users/{user}")
Call<UserModel> getUser(@Path("user") String user);
帶參查詢型
// https://api.github.com/search/users?q=retrofit&page=1&per_page=2
@GET("/search/users")
Call<BaseModel> groupList(@Query("q") String query, @Query("page") String page, @Query("per_page") int per_page);
帶Header型
比如要更新某個(gè)賬戶信息,其接口地址為/info,需要帶的Header有設(shè)備信息device,系統(tǒng)版本version,還要帶請(qǐng)求參數(shù)要更新賬戶的id,如下:
@POST("/info")
Call<Object> updateInfo(@Header("device") String device, @Header("version") int version, @Field("id") String id);
基礎(chǔ)URL
構(gòu)建Retrofit實(shí)例如下:
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())//添加Gson解析數(shù)據(jù)
.baseUrl(ApiService.BASE_API)
.build();
獲取Github用戶列表
ApiService service=retrofit.create(ApiService.class);
Call<List<UserModel>> call = service.getUserList();
call.enqueue(new Callback<List<UserModel>>() {
@Override
public void onResponse(Call<List<UserModel>> call, Response<List<UserModel>> response) {
if (response.isSuccessful()){//請(qǐng)求解析成功判斷
mTxt.append("\n name:\t"+response.body().get(0).getLogin());
mTxt.append("\n type:\t"+response.body().get(0).getType());
mTxt.append("\n admin:\t"+response.body().get(0).isSite_admin());
}
}
@Override
public void onFailure(Call<List<UserModel>> call, Throwable t) {
mTxt.setText(t.getMessage());
}
});
Github的接口基礎(chǔ)地址為:https://api.github.com/ 氧卧,具體的接口點(diǎn)擊鏈接自行查看。