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+日志拦截器结合使用相关推荐

  1. java创建请求拦截器,HttpClient拦截器

    本篇文章帮大家学习HttpClient拦截器,包含了HttpClient拦截器使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 拦截器(interceptor)是那些有助于 ...

  2. Android音乐播放器eclipse,简单的Android音乐播放器 eclipse开发的基于Android平台的音乐播放器 - 下载 - 搜珍网...

    压缩包 : 音乐播放器.zip 列表 音乐播放器/ 音乐播放器/.classpath 音乐播放器/.project 音乐播放器/.settings/ 音乐播放器/.settings/org.eclip ...

  3. Python 自制简单实用的日志装饰器

    在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源. 其实,只需要写一个非常简单的日志装饰器,我们就能大大提升排查问题的效率. 1.简陋版装饰器 写一个装饰器非常简单,因为 ...

  4. 【java文本处理】实现一个简单的小说文本阅读器(分页、翻页、页码跳转)

    一.目的 读出文本(.txt)内容显示至dos命令窗: 按规定行数将文本进行分页: 在dos下实现文本翻页.页码跳转等功能,形成简单小说阅读器. 二.主要方法 1. RandomAccessFile类 ...

  5. java创建日程到期提醒_Mac用户必备日程时间管理器,有计划有效率的人生才算完美!...

    有计划的人,才会产生强大的行动力,才会充满激情的去工作,因为他知道下一步该做什么,目标明确的人,一定会成功,所以,有计划有效率的人生才算完美! 每天的日程安排的满满的,没有一款规划任务,提高效率的GT ...

  6. java 顶点着色_Shader笔记_002简单顶点/片元着色器扩展

    参考<>第五章 一.如何获取其他模型数据 在001里介绍了通过POSITION获取顶点位置坐标,如果想的到更多的模型数据,比如我们想要得到模型上每个顶点的纹理坐标和法线方向 PS:我们可以 ...

  7. 图片播放器 简单使用

    (1)前台_客户端:     var focus_width=800;//图片宽     var focus_height=600;//图片高     var text_height=20;//字高 ...

  8. PostgreSQL multixact日志管理器说明

    PostgreSQL multixact日志管理器说明 MultiXactID日志是uxdb系统用来记录组合事务ID的一种日志.由于uxdb采用了多版本并发控制,因此同一个元组相关联的事务ID可能有多 ...

  9. Canal binlog 日志管理器与GTID简介

    本节目录 1.Canal 位点管理(日志管理器) 1.1 类图 1.2 日志管理器使用方法 2.MySQL GTID 扫盲 正如上文提到的那样,在 Canal Instance 启动的时候,首先会查询 ...

最新文章

  1. python并行编程语言_Python3 系列之 并行编程
  2. linux chmod命令使用
  3. hash冲突解决和javahash冲突解决
  4. 你真的知道敏捷和迭代吗?
  5. linux挂载逻辑卷,CentOS 创建和挂载新的逻辑卷
  6. 如何给python装库_python一键式装单机和RAC数据库
  7. httplistener java_Java监听器Listener使用详解
  8. osgearth_backfill重采样生成低精度金字塔数据
  9. SHIFT-JIS编码范围
  10. python 白盒测试_白盒测试方法
  11. 各省市大学 全国各个省市重点民办本专科大学
  12. 计算机网络之物理层,数据链路层,网络层 学习笔记
  13. 代码量怎么计算_怎么样利用南方CASS三角网法和方格网法进行土方量计算
  14. does not have a companion object, and thus must be initialized here
  15. redis之十五(游标迭代器(过滤器)——Scan)
  16. Cloudflare 远程浏览器隔离
  17. 海格里斯智能自动化立体库仓储管理系统 物流生鲜电商冷链立库应用
  18. 抖音小店无货源前期开店需要多少资金?多久能回本?
  19. 嵌入式系统开发-麦子学院(12)——ARM Cortex A8 硬件基础(2)
  20. 开源的微信个人号接口 itchat 使用

热门文章

  1. hdu1358 最小循环节,最大循环次数 KMP
  2. 【Android 逆向】Android 逆向通用工具开发 ( adb forward 网络端口重定向命令 | PC 端逆向程序主函数分析 )
  3. 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )
  4. 【错误记录】Flutter 运行报错 Error -32000 received from application: There are no running service protocol
  5. 【JetPack】kotlin-android-extensions 插件 ( 视图绑定简单用法 )
  6. 数据结构与算法JavaScript描述——链表
  7. JavaScript中的静态成员
  8. struts2-20-下载文件及授权控制
  9. Junit内部解密之四: Junit单元测试最佳实践
  10. WMframework成长日记(一)——框架介绍