Retrofit和RxJava的封装

来源:互联网 发布:sd卡损坏怎么恢复数据 编辑:程序博客网 时间:2024/05/21 12:48

导入依赖

//retrofit的依赖  compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'  compile'com.squareup.retrofit2:converter-gson:2.0.0-beta4'  compile 'com.squareup.retrofit2:converter-scalars:2.0.0'  compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'  //rxjava的依赖  compile 'io.reactivex.rxjava2:rxandroid:2.0.1'  compile 'io.reactivex.rxjava2:rxjava:2.1.7' 

加入权限

<uses-permission android:name="android.permission.INTERNET" /> 

retrofit的封装类

import retrofit2.Retrofit;import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import retrofit2.converter.scalars.ScalarsConverterFactory;/** * Created by muhanxi on 17/12/5. */public class RetrofitUtils {    private static APIService service  = null ;    public static APIService getInstance(){        if(service == null){            synchronized (RetrofitUtils.class){                Retrofit retrofit = new Retrofit.Builder()                        .baseUrl("http://m.yunifang.com")                        .addConverterFactory(ScalarsConverterFactory.create())                        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                        .client(OkHttpUtils.getInstance())                        .build();                service = retrofit.create(APIService.class);            }        }        return service;    }}

okhttp的封装类
import java.util.concurrent.TimeUnit;import okhttp3.OkHttpClient;/** * Created by muhanxi on 17/12/5. * @author muhanxi */public class OkHttpUtils {    private static OkHttpClient client = null ;    public static OkHttpClient getInstance(){        if(client == null){            synchronized (OkHttpUtils.class){                if(client == null){                    client = new OkHttpClient.Builder()                            .connectTimeout(20000, TimeUnit.SECONDS)                            .writeTimeout(20000,TimeUnit.SECONDS)                            .readTimeout(20000,TimeUnit.SECONDS)                            //.addInterceptor(new CommonHeaderInterceptor())                            //.addInterceptor(new LoggingInterceptor())                            .build();                }            }        }        return client;    }

观察者Observer的封装

import com.google.gson.Gson;import com.google.gson.JsonSyntaxException;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import io.reactivex.Observer;import io.reactivex.disposables.Disposable;/** * Created by muhanxi on 17/12/5. */public abstract class AbstractObserver<T> implements Observer<String> {    public abstract void onSuccess(T t);    /**     * 1  当前 网络异常     * 2  json 解析异常     * 2  未知异常     * @param code     */    public abstract void onFailure(int code);    @Override    public void onSubscribe(Disposable d) {    }    @Override    public void onNext(String result) {        try {            Type type =  getClass().getGenericSuperclass() ;            Type [] types =  ((ParameterizedType)type).getActualTypeArguments() ;            Class clazz = (Class) types[0] ;            Gson gson = new Gson();            T t = (T)  gson.fromJson(result,clazz);            onSuccess(t);        } catch (JsonSyntaxException e) {            e.printStackTrace();            onFailure(2);        }catch (Exception e){            e.printStackTrace();            onFailure(3);        }    }    @Override    public void onError(Throwable e) {        onFailure(1);        System.out.println(e        );    }    @Override    public void onComplete() {    }}

Retrofit的接口
import java.util.Map;import io.reactivex.Observable;import retrofit2.http.FieldMap;import retrofit2.http.FormUrlEncoded;import retrofit2.http.GET;import retrofit2.http.POST;import retrofit2.http.QueryMap;import retrofit2.http.Url;/** * Created by muhanxi on 17/12/5. */public interface APIService {    @GET    Observable<String> get(@Url String url, @QueryMap Map<String,String> map);    @GET    Observable<String> get(@Url String url);    @FormUrlEncoded    @POST    Observable<String> post(@Url String url, @FieldMap Map<String,String> map);}

APIFactory.java这个类里面有对应的四个方法get1, post1
import java.util.Map;import io.reactivex.Observer;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.schedulers.Schedulers;/** * Created by muhanxi on 17/12/5. */public class APIFactory {    private APIFactory(){}    private  static APIFactory factory = null ;    public static APIFactory getInstance(){        if(factory == null){            synchronized (APIFactory.class){                if(factory == null){                    factory = new APIFactory();                }            }        }        return factory;    }    public void get(String url, Map<String,String> map, Observer<String> observer){        RetrofitUtils.getInstance().get(url,map)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }    public void get(String url,Observer<String> observer){        RetrofitUtils.getInstance().get(url)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }    public void post(String url,Map<String,String> map,Observer<String> observer){        RetrofitUtils.getInstance().post(url,map)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(observer);    }}

LoggingInterceptor日志拦截器的封装

import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;class LoggingInterceptor implements Interceptor {  @Override public Response intercept(Interceptor.Chain chain) throws IOException {    Request request = chain.request();    long t1 = System.nanoTime();    Response response = chain.proceed(request);    long t2 = System.nanoTime();    System.out.println(" this request  url  " + response.request().url() + "  "  + (t2 - t1)/1000000);    return response;  }}

CommonHeaderInterceptor公共的请求头拦截器
import java.io.IOException;import okhttp3.Interceptor;import okhttp3.Request;import okhttp3.Response;/** * Created by muhanxi on 17/12/5. */public class CommonHeaderInterceptor implements Interceptor {    @Override    public Response intercept(Chain chain) throws IOException {        Request request =  chain.request();        Request.Builder builder =  request.newBuilder() ;        builder.addHeader("key","11");        builder.addHeader("User-Agent","android");        return chain.proceed(builder.build());    }}

MVP

public class AddModel {    public void getData(String pid, final IModel iModel){        Map<String, String> map = new HashMap<>();//        https://www.zhaoapi.cn/product/addCart?uid=1245&pid=45&token=86B6DEFFD9DEF5FF93C3E7BA5560A0E6&Source=android        map.put("uid","1245");        map.put("pid",pid);        map.put("token","86B6DEFFD9DEF5FF93C3E7BA5560A0E6");        map.put("Source","android");        APIFactory01.getInstance().post1("/product/addCart", map, new AbstractObserver01<AddBean>() {            @Override            public void onSuccess(AddBean addBean) {                iModel.success(addBean);            }            @Override            public void onFailure() {            }        });    }    public interface IModel{        //成功 失败        public void success(AddBean bean);        public void failrue();    }}

public interface AddView {    //成功 失败    public void success(AddBean bean);    public void failrue();}

public class AddPresenter {    AddView view;    private final AddModel model;    public AddPresenter(AddView view) {        this.view = view;        model = new AddModel();    }    public void shangpin(String pid){        model.getData(pid, new AddModel.IModel() {            @Override            public void success(AddBean bean) {                view.success(bean);            }            @Override            public void failrue() {            }        });    }    //防止内存遗漏    public void datach(){        this.view = null;    }}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎样制作二维码图片 照片二维码生成器 怎样做二维码 二维码图片素材 二维码制作生成器 二维码生成器安卓版 二维码扫描下载 如何制作二维码图片 联图二维码 2维码生成器 怎样制作二维码 二维码扫一扫 二维码转换器 草科二维码生成器 二维码生成网址 怎么制作二维码文字图 二维码是什么原理 在线二维码扫描 什么是二维码 二维码美化 怎么样制作二维码 二维码转换 我的二维码 二维码在线扫描 手绘二维码 二维码英文 二维码识别器 如何制作二维码图片表白 wifi二维码生成器 二维码的原理 扫二维码软件 二维码是什么 在线二维码生成 下载二维码扫描 二维码谁先发明的 扫二维码在线使用 二维码平台 二维码扫不出来 网址二维码生成 二维码生成器在线制作 自制二维码生成器