Retrofit+OKhttp+RxJava框架的封装

来源:互联网 发布:单片机按键电路的作用 编辑:程序博客网 时间:2024/06/05 02:05
写在前面:

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

 1. 最外层封装,在项目中可直接使用的工具类

    public static Call<LoginBean> login(String userNameString 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;    }



 

0 0
原创粉丝点击