建立

什么是改造?

官方页面改造自己描述为:

适用于 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