建立
什麼是改造?
在官方頁面改造自己描述為:
適用於 Android 和 Java 的型別安全的 REST 客戶端。
該庫使得從 Web API 下載 JSON 或 XML 資料相當簡單。下載資料後,使用此處列出的介面卡/解析器中的任何一個將其解析為為每個請求定義的普通舊 Java 物件(POJO)。
為了演示目的,我們將使用 GSON 解析器
設定 :
- 在 manifest.xml 中新增 Internet 許可權:
<uses-permission android:name="android.permission.INTERNET" />
- 將以下內容新增到
build.gradle
檔案中:
dependencies {
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
}
-
根據你的 Json 響應建立正確的 POJO(模型) :
如果你的 json 響應是:
{
"CategoryModel": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
}
然後你可以使用像 JsonOnlineEditor 或 JsonView 這樣的網站來格式化你的 json,這將有助於建立你的模型或使用 jsonschema2pojo 將你的 Json 轉換為使用 GSON 註釋的 POJO :
public class CategoryModel {
@SerializedName("debug")
private String debug;
@SerializedName("window")
private Window window;
@SerializedName("image")
private Image image;
@SerializedName("text")
private Text text;
}
-
然後我們需要一個 Retrofit 例項,它作為所有請求和響應的控制器。
注意:我們更喜歡將此控制器建立為單例,如果我們想要設定客戶端的一些附加屬性,這非常有用。
public static final String BASE_URL = "http://test.com"
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
- 接下來建立 Interface 類,其中為每個呼叫定義所有帶有請求,響應型別和請求引數的 api 呼叫。(我們需要建立一個用於管理 url 呼叫的介面,如
GET
,POST
..etc。)
public interface IPlusService {
@GET("/api/category")
Call<CategoryModel> getAllCategory();
}
- 使用改造例項建立網路/請求客戶端:
IPlusService requestClient = retrofit.create(IPlusService.class);
- 在你的
Fragment/Activity
中呼叫你的網路服務:
requestClient.getAllCategory().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<CategoryModel> call, Response<CategoryModel> response) {
// DO success handling
}
@Override
public void onFailure(Call<CategoryModel> call, Throwable t) {
// DO failure handling
}
});