retrofit2开始使用retrofit2


备注

概述:

改造 :由Square,Inc。为Android和Java提供类型安全的HTTP客户端

GitHub Repo: https//github.com/square/retrofit

它是Android中广泛使用的网络库之一。通过它的设计,它非常灵活,提供广泛的即插即用功能,如支持各种Json Parser,如GSON,Jackson,moshi,支持Rx-Java等

版本

发布日期
2.3.0 2017年5月13日
2.2.0 2017年2月21日
2.1.0 2016年6月15日

建立

什么是改造?

官方的Retrofit页面将自己描述为:

适用于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 调用您的Web服务:
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