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'加入权限

先写几个公共的封装类

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 implements Observer {

//不需要下面重写的四个方法,只需要自己写的两个抽象方法

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 get(@QueryMap Map map);*/

//-----------------------下面用于封装的请求

//http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10

//返回string字符串的请求方法,传后面整个url

@GET

Observable get1(@Url String url);//重载

@GET

Observable get1(@Url String url,@QueryMap Map map);

@FormUrlEncoded

@POST

Observable post1(@Url String url, @FieldMap Map map);

@POST

Observable 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 map, Observer observer){

//调用retrofit工具类的方法

RetrofitUtils.getInstance().get1(url, map)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(observer);

}

public void get1(String url,Observer observer){

RetrofitUtils.getInstance().get1(url)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(observer);

}

public void post1(String url,Map map,Observer observer){

RetrofitUtils.getInstance().post1(url,map)

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(observer);

}

public void post1(String url,Observer 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 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() {

@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() {

@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() {

@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() {

@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() {

@Override

public void onSuccess(Bean bean) {

System.out.println("beanpost带参数 ="+bean.getNewslist().toString());

}

@Override

public void onFailure() {

System.out.println("异常了");

}

});*/

}

}

java封装拦截请求_Retrofit,OkHttp拦截器,RxJava封装请求网络相关推荐

  1. OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3

    OkHttp协议 okhttp是一个第三方类库,用于android中请求网络 这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...

  2. Okhttp 拦截器 请求添加公共参数、公共Headers 方法

    retrofit 基于okhttp.使用retrofit /okhttp时候,这些都会wifi 直连的,不走系统的wifi设置,代理是抓不到包的.所以如果 想抓包那么抓网卡吧,打印请求或者添加公共参数 ...

  3. java参数action_Struts2之Action接收请求参数和拦截器详解

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的A ...

  4. java 判断请求为 ajax请求_Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求...

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>> ...

  5. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,java 判断请求是不是ajax请求 Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断 ...

  6. filter 拦截器 获取http请求参数

    里面一些方法使用了hutool的工具类 可以替换成你自己习惯的 工具类不是记录的主要东西. 记录点 1.怎么创建拦截器 2.怎么统一管理拦截器是否启用和输用顺序 3.怎么获取传入的参数 4.怎么获取返 ...

  7. android方法拦截器,android OkHttp拦截器(Interceptor)的使用

    一 概念 在OkHttp内部是使用拦截器来完成请求和响应,利用的是责任链设计模式,能够用来转换,重试,重写请求的机制.如今主流的网络框架非Retrofit莫属,它的内部请求也是基于OkHttp的. 在 ...

  8. Struts2之Action接收请求参数和拦截器

    技术分析之在Struts2框架中使用Servlet的API          1. 在Action类中也可以获取到Servlet一些常用的API         * 需求:提供JSP的表单页面的数据, ...

  9. 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析

    square/okhttp​github.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...

最新文章

  1. bitcoin cash的地址格式 cash addr 简介
  2. Android之线程池深度剖析
  3. 左撇子的人怎么使用计算机,小漫画讲述冷知识,左撇子很苦恼,电脑自动弹窗发明者是谁?...
  4. javaWeb_JSP 动态指令 forward 的程序
  5. EBS默认的登录账户和密码
  6. 【Qt】水平和垂直布局
  7. 《网络空间欺骗:构筑欺骗防御的科学基石》一1.1 主动网络空间防御中网络空间抵赖与欺骗的视图...
  8. python元素定位input button_python+selenium 定位到元素,无法点击的解决方法
  9. 对安装好的hadoop集群做个测试
  10. Mysql 8 驱动问题:报错Unknown system variable 'query_cache_size'
  11. 在线HTML压缩工具
  12. 2018北大计算机复试线,北京大学历年考研复试分数线_2018考研分数线
  13. 最详细的 UART协议 分析在这里!
  14. 第二十二章 MySQL有哪些“饮鸩止渴”提高性能的方法?
  15. PDF文件格式转换工具 迅捷PDF转换成Word转换器
  16. elementUI表格中气泡位置偏移
  17. 华为内部访谈:凡是溜须拍马的员工,一律拿掉
  18. 一个成功的BI项目实施需要注意哪些? 1
  19. shell内建命令--Linux
  20. 初学graphiql 查询操作

热门文章

  1. Java应用程序中的内存泄漏和内存管理
  2. 使用序列化查找对象中的脏字段
  3. Servlet文件上传功能的实现(commons-fileupload)
  4. IntelliJ IDEA for Mac 如何将普通 Java 项目变为 Web 项目
  5. php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...
  6. java stopself_然后,即使我停止了服务,Context.startForegroundService()也没有调用Service.startForeground()...
  7. 面向对象设计思想-C语言
  8. html中的文档格式及举例,跟我一起从零开始学习WebAssembly(三)、最简单的例子hello world(使用自定义HTML模板)...
  9. php伪静态后不能访问html,php伪静态后html不能访问怎么办
  10. c语言实验报告5数组,c语言实验报告五一维数组.doc