建立

什麼是改造?

官方頁面改造自己描述為:

適用於 Android 和 Java 的型別安全的 REST 客戶端。

該庫使得從 Web API 下載 JSONXML 資料相當簡單。下載資料後,使用此處列出的介面卡/解析器中的任何一個將其解析為為每個請求定義的普通舊 Java 物件(PO​​JO)。

為了演示目的,我們將使用 GSON 解析器

設定

  1. 在 manifest.xml 中新增 Internet 許可權:
 <uses-permission android:name="android.permission.INTERNET" />
  1. 將以下內容新增到 build.gradle 檔案中:
dependencies {
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'  
}
  1. 根據你的 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;"
        }
    }
}

然後你可以使用像 JsonOnlineEditorJsonView 這樣的網站來格式化你的 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;
}
  1. 然後我們需要一個 Retrofit 例項,它作為所有請求和響應的控制器。

    注意:我們更喜歡將此控制器建立為單例,如果我們想要設定客戶端的一些附加屬性,這非常有用。

public static final String BASE_URL = "http://test.com"

Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
  1. 接下來建立 Interface 類,其中為每個呼叫定義所有帶有請求,響應型別和請求引數的 api 呼叫。(我們需要建立一個用於管理 url 呼叫的介面,如 GETPOST..etc。)
public interface IPlusService {
    @GET("/api/category")
    Call<CategoryModel> getAllCategory();
}
  1. 使用改造例項建立網路/請求客戶端:
IPlusService requestClient = retrofit.create(IPlusService.class);
  1. 在你的 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 
    }
});

好資源:

  1. https://github.com/codepath/android_guides/wiki/Consuming-APIs-with-Retrofit

  2. http://www.vogella.com/tutorials/Retrofit/article.html

  3. http://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/

  4. https://futurestud.io/tutorials/retrofit-getting-started-and-android-client