MVP基类,Retrofit,OkHttp拦截器,RxJava封装
来源:互联网 发布:电子滚动屏幕软件 编辑:程序博客网 时间:2024/06/06 00:53
Retrofit和Okhttp和RxJava的封装
导入依赖
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' 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' compile 'com.google.code.gson:gson:2.8.2' compile 'com.squareup.okhttp3:okhttp:3.9.0'加入权限
<uses-permission android:name="android.permission.INTERNET" />
先写几个公共的封装类
retrofit的封装类
public class RetrofitUtils { private static IGetService service = null; //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 //单例模式 public static IGetService getInstance(){ if(service==null){ synchronized (RetrofitUtils.class){ if(service==null){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.tianapi.com") .addConverterFactory(ScalarsConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(OkHttpUtils.getInstance()) .build(); service = retrofit.create(IGetService.class); } } } return service; }}okhttp的封装类
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(2000, TimeUnit.SECONDS) .writeTimeout(2000,TimeUnit.SECONDS) .readTimeout(2000,TimeUnit.SECONDS) .addInterceptor(new LoggingInterceptor()) .addInterceptor(new CommonHeaderInterceptor()) .build(); } } } return client; }}
LoggingInterceptor日志拦截器的封装
public class LoggingInterceptor implements Interceptor{ @Override public Response intercept(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公共的请求头拦截器
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","aa"); builder.addHeader("User-Agent","android"); return chain.proceed(builder.build()); }}观察者Observer的封装
//观察者的封装public abstract class AbstractObserver<T> implements Observer<String> { //不需要下面重写的四个方法,只需要自己写的两个抽象方法 public abstract void onSuccess(T t); public abstract void onFailure(); @Override public void onSubscribe(Disposable d) { } @Override public void onNext(String result) { //这里的s是请求网络传回来的string字符串 Type type = getClass().getGenericSuperclass(); Type[] types = ((ParameterizedType) type).getActualTypeArguments(); Class clazz = (Class) types[0];//强转成类对象 //使用gson解析 Gson gson = new Gson(); T t = (T) gson.fromJson(result,clazz); //调用抽象方法onSuccess onSuccess(t); } @Override public void onError(Throwable e) { onFailure(); } @Override public void onComplete() { }}Retrofit的接口
public interface IGetService { /* @GET("/nba") Observable<Bean> get(@QueryMap Map<String,String> map);*/ //-----------------------下面用于封装的请求 //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 //返回string字符串的请求方法,传后面整个url @GET Observable<String> get1(@Url String url);//重载 @GET Observable<String> get1(@Url String url,@QueryMap Map<String,String> map); @FormUrlEncoded @POST Observable<String> post1(@Url String url, @FieldMap Map<String,String> map); @POST Observable<String> post1(@Url String url);}APIFactory.java这个类里面有对应的四个方法get1, post1
public class 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 get1(String url, Map<String,String> map, Observer<String> observer){ //调用retrofit工具类的方法 RetrofitUtils.getInstance().get1(url, map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void get1(String url,Observer<String> observer){ RetrofitUtils.getInstance().get1(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void post1(String url,Map<String,String> map,Observer<String> observer){ RetrofitUtils.getInstance().post1(url,map) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } public void post1(String url,Observer<String> observer){ RetrofitUtils.getInstance().post1(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); }}在model层里面调用APIFactory里面的4个方法get1,post1,
//具体的model层public class LoginModelImpl { //model层处理数据,请求网络 public void getData(final LoginModelCallBack loginModelCallBack) {//http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 Map<String,String> map = new HashMap<>(); map.put("key","71e58b5b2f930eaf1f937407acde08fe"); map.put("num","10"); /* Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.tianapi.com") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); IGetService service = retrofit.create(IGetService.class); service.get(map).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Bean>() { @Override public void accept(Bean bean) throws Exception { loginModelCallBack.success(bean); } });*/ //------------ //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 //调用apifactory //传参map集合 APIFactory.getInstance().get1("/nba", map, new AbstractObserver<Bean>() { @Override public void onSuccess(Bean bean) { // System.out.println("beanget传参 ="+bean.getNewslist().toString()); } @Override public void onFailure() { // System.out.println("异常了"); } }); //不传参,直接传路径 APIFactory.getInstance().get1("/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10", new AbstractObserver<Bean>() { @Override public void onSuccess(Bean bean) { // System.out.println("beanget不传参 ="+bean.getNewslist().toString()); } @Override public void onFailure() { // System.out.println("异常了"); } }); //不传参直接传路径post APIFactory.getInstance().post1("/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10", new AbstractObserver<Bean>() { @Override public void onSuccess(Bean bean) { System.out.println("beanpost不带参数 ="+bean.getNewslist().toString()); loginModelCallBack.success(bean); } @Override public void onFailure() { System.out.println("异常了"); } }); /* //传参 post路径,不好使 APIFactory.getInstance().post1("/nba", map, new AbstractObserver<Bean>() { @Override public void onSuccess(Bean bean) { System.out.println("beanpost带参数 ="+bean.getNewslist().toString()); } @Override public void onFailure() { System.out.println("异常了"); } });*/ }}
阅读全文
0 0
- MVP基类,Retrofit,OkHttp拦截器,RxJava封装
- MVP基类,Retrofit,OkHttp拦截器,RxJava封装
- MVP+Retrofit+RxJava+Okhttp拦截器
- MVP+Retrofit+RxJava+Okhttp拦截器
- RxJava+okhttp+Retrofit+Mvp 的封装
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- MVP+rxJava+retrofit+拦截器
- RxJava+Retrofit+OkHttp+mvp
- mvp+rxjava+retrofit+okhttp
- MVP+Retrofit+Okhttp+RxJava
- Retrofit+Rxjava+Okhttp+MVP
- 封装RxJava+Retrofit+OkHttp
- MVP和Retrofit+Rxjava+OkHttp封装结合请求数据
- MVp封装RxJava+Retrofit
- Rxjava+Retrofit+okhttp+mvp实现
- 简单MVP-Retrofit-Rxjava-OKhttp
- retrofit-rxjava封装、mvp-retrofit-rxjava demo
- mvp demo:mvp+rxjava+retrofit(okhttp)+greendao
- java文件字符流
- json的作用:按规定格式保存js语言中的一组数据并转换为字符串(json是种特殊的容器,一般保存对象和数组数据(可以嵌套),并把它们装换为字符串在网络中传输?))
- 笔记 vue.js循环语句小结
- spring-boot介绍
- linux 解压目录下所有的zip文件 find 、xargs
- MVP基类,Retrofit,OkHttp拦截器,RxJava封装
- 关于eclipse中xml文件的注释快捷键
- STM32 HAL 库, 配置串口DMA接收及空闲中断
- CentOS7 安装 MongoDB3.6
- springboot(四、springboot+mybatis)
- elk的安装使用(二)
- Java切割wav音频文件
- Java并发编程札记-(三)JUC原子类-04原子方式更新引用
- pandas基础:Series、和NumPy里的random.x()