Retrofit 備忘

原本很抗拒 Retrofit 的,結果前幾天在車上無聊想了一下,誒這玩意其實挺美的啊!java

引入

在 21 世紀 10 年代還須要本身拷貝 jar 包的庫都是耍流氓。—— 我說的git

dependencies {
    compile 'com.squareup.retrofit:retrofit:1.6.1'
}

Gradle 是什麼本身惡補去。github

聲明 API

我喜歡對照着 Resource 來聲明 API。json

public interface Greet {

    @FormUrlEncoded
    @POST("/greets")
    void create(@Field("message") String message, Callback<Void> callback);

}

構建類

public class YeahApi {

    private static final String ENDPOINT = "https://api.yeah.xingrz.us";

    // 讓 Gson 自動將 API 中的下劃線全小寫式變量名轉換成 Java 的小寫開頭駝峯式
    private static final Gson gson = new GsonBuilder()
            .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
            .create();

    private static final RestAdapter adapter = new RestAdapter.Builder()
            .setEndpoint(ENDPOINT)
            .setConverter(new GsonConverter(gson))
            .setRequestInterceptor(new RequestInterceptor() {
                @Override
                public void intercept(RequestFacade request) {
                    request.addHeader("User-Agent", "Yeah/" + BuildConfig.VERSION_NAME);
                    request.addHeader("Accept", "application/json");
                }
            })
            .build();

    private static final Greet GREET_API = adapter.create(Greet.class);

    public static Greet greet() {
        return GREET_API;
    }

}

請求

YeahApi.greet().create("Hello world!", new Callback<Void>() {
    @Override
    public void success(Void aVoid, Response response) {
        // ...
    }

    @Override
    public void failure(RetrofitError error) {
        // ...
    }
});
相關文章
相關標籤/搜索