java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用
1.需要使用到的依赖如下(Retrofit\RxJava\RecyclerView\日志拦截器)
//only Retrofit(只用Retrofit联网)
implementation 'io.reactivex:rxjava:x.y.z'
implementation 'io.reactivex:rxandroid:1.0.1'
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation
'com.squareup.retrofit2:converter-gson:2.0.2'
implementation
'com.squareup.retrofit2:adapter-rxjava:2.0.2'
implementation
'com.android.support:recyclerview-v7:27.1.1'
//1 如果使用OKHttp了,就将以前的依赖使用下面的依赖替换掉,下面的依赖会自带拦截器:
implementation
'com.squareup.okhttp3:logging-interceptor:3.12.0'
2.省略的一些东西
封装类bean、
接口IView
接口回调ICallBack、
适配器adapter、
网络数据地址请求Model、
地址存放API、
与以往的写法都相同,此处就不再写了,不会的,可以翻阅前面的文章。
3.主要的RetrofitIView。
注意点:
以前单单使用Retrofit的时候,在注解@Get或其他下面使用的是Call
ResponseBody> 方法();
现在结合Rxjava使用,在注解@Get或其他下面使用的是被观察者Observable ResponseBody> 方法();
如果使用单个参数拼接,可以来方法小括号中添加 (@Query("字段") 类型 字段属性)
举例:
public interface RetrofitView {
//北京天气
@GET("weather_mini")
//注意Observable 右侧还有加括号,里面是ResponseBody 拼接字段可以在方法小括号中使用(@Query(“字段”) 类型 字段)
Observable ResponseBody> getWeather(@Query("city") String
city);
}
4.网络请求工具类
package com.bwie.lx_retrofit_rxjava.utils;
import android.util.Log;
import com.bwie.lx_retrofit_rxjava.bean.WeatherBean;
import com.bwie.lx_retrofit_rxjava.item.ICallBack;
import com.google.gson.Gson;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import
retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class RxRetrofitUtils {
//使用单例模式
private static volatile RxRetrofitUtils instance;
private final Retrofit.Builder mBuilder;
private RetrofitView mRx {
//日志拦截器
//1 设置日志拦截器级别
HttpLoggingInterceptor.Level level =
HttpLoggingInterceptor.Level.BODY;
//2 创建一个日志拦截器
HttpLoggingInterceptor httpLoggingInterceptor = new
HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//打印信息
Log.i("http信息打印:", "log: " + message);
}
});
//3 为日志拦截器设置日志级别
httpLoggingInterceptor.setLevel(level);
//4 创建HttpClient对象 添加拦截器
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(5000, TimeUnit.SECONDS)
.readTimeout(5000, TimeUnit.SECONDS)
.writeTimeout(5000, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
.build();
//5 将HttpClient对象加入到Retrofit中
//创建Retrifit对象
mBuilder = new Retrofit.Builder();
//设置 Json 转换器
mBuilder.addConverterFactory(GsonConverterFactory.create());
//添加日志拦截器
mBuilder.client(okHttpClient);
}
//双重锁机制
public static RxRetrofitUtils getInstance(){
if(instance==null){
synchronized (RxRetrofitUtils.class){
if(instance==null){
instance = new RxRetrofitUtils();
}
}
}
return instance;
}
//抽取出来的方法
private void getWeatherBeiJing(String url) {
Retrofit retrofit =
mBuilder.baseUrl(url)//添加请求网址,以/结尾
.addCallAdapterFactory(Rx )//括号里 是RxJava 适配器
CallAdapterFactory 点 create()创建一个 。将英文拼接,就是小括号里的参数
.build();
mRxJavaService =
retrofit.create(RetrofitView.class);
}
//北京天气网络请求方法
public void getWeatherU(String url, final ICallBack iCallBack,
final Type type ){
//Retrofit+Rxjava 设置方法 收取出来的
getWeatherBeiJing(url);
//通过接口对象mRxJavaService.点 调用抽象方法如 getWeather("北京")
Observable ResponseBody> weather =
mRxJavaService点RetrofitIView中的抽象方法;
//通过上一步得到的对象,进行设置
weather.subscribeOn(Schedulers.io())//IO线程加载数据
.observeOn(AndroidSchedulers.mainThread())//主线程显示数据
.subscribe(new Subscriber ResponseBody>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
String str = "网络请求访问失败";
iCallBack.onFailder(str);
}
@Override
public void onNext(ResponseBody responseBody) {
try {
//注意:这儿不用response.body了,它已经是responsebody
String result = responseBody.string();
WeatherBean weatherBean1 = new Gson().fromJson(result,
type);
Log.e("TAG", "response == " +
weatherBean1.getData().getGanmao());
if(weatherBean1!=null){
iCallBack.onSuccess(weatherBean1);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
java创建请求拦截器_80.简单Retrofit+RxJava+日志拦截器结合使用相关推荐
- java创建请求拦截器,HttpClient拦截器
本篇文章帮大家学习HttpClient拦截器,包含了HttpClient拦截器使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 拦截器(interceptor)是那些有助于 ...
- Android音乐播放器eclipse,简单的Android音乐播放器 eclipse开发的基于Android平台的音乐播放器 - 下载 - 搜珍网...
压缩包 : 音乐播放器.zip 列表 音乐播放器/ 音乐播放器/.classpath 音乐播放器/.project 音乐播放器/.settings/ 音乐播放器/.settings/org.eclip ...
- Python 自制简单实用的日志装饰器
在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源. 其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率. 1.简陋版装饰器 写一个装饰器非常简单,因为 ...
- 【java文本处理】实现一个简单的小说文本阅读器(分页、翻页、页码跳转)
一.目的 读出文本(.txt)内容显示至dos命令窗: 按规定行数将文本进行分页: 在dos下实现文本翻页.页码跳转等功能,形成简单小说阅读器. 二.主要方法 1. RandomAccessFile类 ...
- java创建日程到期提醒_Mac用户必备日程时间管理器,有计划有效率的人生才算完美!...
有计划的人,才会产生强大的行动力,才会充满激情的去工作,因为他知道下一步该做什么,目标明确的人,一定会成功,所以,有计划有效率的人生才算完美! 每天的日程安排的满满的,没有一款规划任务,提高效率的GT ...
- java 顶点着色_Shader笔记_002简单顶点/片元着色器扩展
参考<>第五章 一.如何获取其他模型数据 在001里介绍了通过POSITION获取顶点位置坐标,如果想的到更多的模型数据,比如我们想要得到模型上每个顶点的纹理坐标和法线方向 PS:我们可以 ...
- 图片播放器 简单使用
(1)前台_客户端: var focus_width=800;//图片宽 var focus_height=600;//图片高 var text_height=20;//字高 ...
- PostgreSQL multixact日志管理器说明
PostgreSQL multixact日志管理器说明 MultiXactID日志是uxdb系统用来记录组合事务ID的一种日志.由于uxdb采用了多版本并发控制,因此同一个元组相关联的事务ID可能有多 ...
- Canal binlog 日志管理器与GTID简介
本节目录 1.Canal 位点管理(日志管理器) 1.1 类图 1.2 日志管理器使用方法 2.MySQL GTID 扫盲 正如上文提到的那样,在 Canal Instance 启动的时候,首先会查询 ...
最新文章
- python并行编程语言_Python3 系列之 并行编程
- linux chmod命令使用
- hash冲突解决和javahash冲突解决
- 你真的知道敏捷和迭代吗?
- linux挂载逻辑卷,CentOS 创建和挂载新的逻辑卷
- 如何给python装库_python一键式装单机和RAC数据库
- httplistener java_Java监听器Listener使用详解
- osgearth_backfill重采样生成低精度金字塔数据
- SHIFT-JIS编码范围
- python 白盒测试_白盒测试方法
- 各省市大学 全国各个省市重点民办本专科大学
- 计算机网络之物理层,数据链路层,网络层 学习笔记
- 代码量怎么计算_怎么样利用南方CASS三角网法和方格网法进行土方量计算
- does not have a companion object, and thus must be initialized here
- redis之十五(游标迭代器(过滤器)——Scan)
- Cloudflare 远程浏览器隔离
- 海格里斯智能自动化立体库仓储管理系统 物流生鲜电商冷链立库应用
- 抖音小店无货源前期开店需要多少资金?多久能回本?
- 嵌入式系统开发-麦子学院(12)——ARM Cortex A8 硬件基础(2)
- 开源的微信个人号接口 itchat 使用
热门文章
- hdu1358 最小循环节,最大循环次数 KMP
- 【Android 逆向】Android 逆向通用工具开发 ( adb forward 网络端口重定向命令 | PC 端逆向程序主函数分析 )
- 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )
- 【错误记录】Flutter 运行报错 Error -32000 received from application: There are no running service protocol
- 【JetPack】kotlin-android-extensions 插件 ( 视图绑定简单用法 )
- 数据结构与算法JavaScript描述——链表
- JavaScript中的静态成员
- struts2-20-下载文件及授权控制
- Junit内部解密之四: Junit单元测试最佳实践
- WMframework成长日记(一)——框架介绍