建立
什么是改造?
在官方页面改造自己描述为:
适用于 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
}
});