Retrofit+OKhttp+RxJava框架的封装

写在前面:

       在封装框架时,我们通常会在数据请求框架上再封一层,以便当我们需要对网络框架进行修改时,只需在内部替换框架即可,对我们的App项目中的使用不影响

 1. 最外层封装,在项目中可直接使用的工具类
     public static  Call<LoginBean>  login (String userName String password) {
    HttpParams params = new HttpParams();

    params.putHeaders("Referer", LOGIN_URL);
    params.putHeaders("User-Agent", USER_AGENT);
    params.put("from", LOGIN_URL);
    params.put("service", "client_transaction");
    params.put("username", userName);
    params.put("password", password);

    return HttpTools.get(LOGIN_URL, LoginBean.class, false,  params);
}
         public static  Observable<PEArticle>  getArticle (String articleId) {
    HttpParams params = new HttpParams();
    params.put("id", articleId);
    params.put("serviceId", "panda");
    return ApiConnection.<PEArticle>createGet()
            .type(PEArticle.class)
            .url(ARTICLE_URL)
            .params(params)
            .requestCall().observable();
}
 2. 封装在内部的框架可被替换成其他的网络请求框架,比如retrofit ,Okhttp, RxVolley
public class HttpTools {

    public static <T> Call<T> get(String url, Class<T> type, boolean shouldCache, HttpParams params) {

        return   ApiConnection.<T>createGet()
                .url(url)
                .params(params)
                .type(type)
                .shouldCache(shouldCache)
                .requestCall();
    }
3. 下面是从Retrofit中摘出来的一些类,修改部分代码实现自己的接口
4.最里层封装
public class ApiConnection {

    public static <T> Builder<T> createGet() {
        return new Builder<T>().method(Method.GET);
    }

    public static <T> Builder<T> createPost() {
        return new Builder<T>().method(Method.POST);
    }
    public static class Builder<T> {

        private String url;

        private HttpParams params;

        private boolean shouldCache = true;

        private int method = Method.GET;

        private Class<T> type;

        private int timeoutMs = Network.DEFAULT_TIME_OUT;


        public  Builder() {
        }

        public Builder<T> url(String url) {
            this.url = url;
            return this;
        }

        Builder<T> method(int method) {
            this.method = method;
            return this;
        }

        public Builder<T> params(HttpParams params) {
            this.params = params;
            return this;
        }

        public Builder<T> shouldCache(boolean shouldCache) {
            this.shouldCache = shouldCache;
            return this;
        }

        public Builder<T> type(Class<T> type) {
            this.type = type;
            return this;
        }

//使用Okhttp进行数据请求
public Call<T> requestCall() {
build();
Call<T> okHttpCall = new OkHttpCall<>(this);
Call call = DaggerCallComponent.builder()
.applicationComponent(AppContext.getInstance().getApplicationComponent())
.callModule(new CallModule(okHttpCall)).build().call();
return call;
}
5. Retrofit 转化Rxjava接口
public class RxJavaCallAdapter {

    public <R> Observable<R> toBody(Call<R> call) {
        Observable<R> observable = adapt(call)
                .lift(OperatorMapResponseToBodyOrError.<R>instance());

        return observable;
    }

    public <R> Observable<Response<R>> adapt(Call<R> call) {
        Observable<Response<R>> observable = Observable.create(new CallOnSubscribe<>(call));

        return observable;
    }



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值