原本很抗拒 Retrofit 的,結果前幾天在車上無聊想了一下,誒這玩意其實挺美的啊!java
在 21 世紀 10 年代還須要本身拷貝 jar 包的庫都是耍流氓。—— 我說的git
dependencies { compile 'com.squareup.retrofit:retrofit:1.6.1' }
Gradle 是什麼本身惡補去。github
我喜歡對照着 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) { // ... } });