Retrofit简单封装,实现链式编程

来源:互联网 发布:nginx视频教程 编辑:程序博客网 时间:2024/05/21 19:29

说明

简单封装了Retrofit,实现链式编程,兼容其他插件(例如rxjava,gson等)。 Retrofit创建的Service对象之后,通过使用回调的方式调用方法返回对应方法的返回对象。 没有注入代码,没有使用反射。不增加程序负担。

例如:
//定义service,请求interface MainService {    @GET("s?wd=/{str}")    Call<String> searchRetrofit(@Path("str") String str);}//回调处理Callback<String> callback = new Callback<String>() {        @Override        public void onResponse(Call<String> call, Response<String> response) {            String body = response.body();            webView.loadDataWithBaseURL("", body, "text/html", "UTF-8", "");        }        @Override        public void onFailure(Call<String> call, Throwable t)        }    };//发送请求RetrofitKT        .newBuilder()        .addConverterFactory(RetrofitConverter.RetrofitFactory.create())        .build("http://wwww.baidu.com/")        .service(MainService.class)        .method("searchRetrofit", "Retrofit")        .obtain(new BaseCallback<>(callback));

service()方法,传入一个Service类(MainService.class),这里使用Retrofit.create()创建这个service对象(mainService),并通过method方法得到mainService中的方法(searchRetrofit()),最后在obtain()中调用searchRetrofit()方法。
obtain()方法传入一个接口ReturnTypeAdapter,在这里会将searchRetrofit()方法的返回值(Call)传递给hook方法。可以通过自定义ReturnTypeAdapter来处理返回值。

BaseCallback就是简单实现。在hook方法中进行了网络请求,并添加回调,这里可以实现很多自定义功能(例如 配置统一取消请求等)。

public interface ReturnTypeAdapter<T> {    void hook(T result);}public class BaseCallback<T> implements ReturnTypeAdapter<Call<T>> {    private Callback<T> callback;    public BaseCallback(Callback<T> callback) {        this.callback = callback;    }    @Override    public void hook(Call<T> result) {        result.enqueue(new Callback<T>() {            @Override            public void onResponse(Call<T> call, Response<T> response) {                if (callback != null)                    callback.onResponse(call, response);            }            @Override            public void onFailure(Call<T> call, Throwable t) {                if (callback != null)                    callback.onFailure(call, t);            }        });    }}

Github 链接

https://github.com/Huang102/RetrofitKT
欢迎访问,同时希望你提出宝贵意见。

原创粉丝点击