【Android】RxJava+Retrofit+OKHttp3实现数据上传

2023-10-30

依赖引入
//Gson
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
//OkHttp3
implementation 'com.squareup.okhttp3:okhttp:4.4.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.4.0'
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
//RxAndroid
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
封装
public class RetrofitClient {
    private static volatile RetrofitClient retrofitClient;
    private Retrofit retrofit;
    private OkHttpClient okHttpClient;
    private ApiService apiService;
    private static final String baseUrl = "https://www.baidu.com/";
    private RetrofitClient() {}
    //单例
    public static RetrofitClient getInstance() {
        if (retrofitClient == null) {
            synchronized (RetrofitClient.class) {
                if (retrofitClient == null) {
                    retrofitClient = new RetrofitClient();
                }
            }
        }
        return retrofitClient;
    }
    //okhttp设置
    private OkHttpClient getOkHttpClient() {
        if (null == okHttpClient) {
            okHttpClient = new OkHttpClient.Builder()
                    .connectTimeout(10, TimeUnit.SECONDS)//连接超时
                    .readTimeout(10, TimeUnit.SECONDS)//读取超时
                    .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))//设置日志拦截器
                    .build();
            okHttpClient.writeTimeoutMillis();
            okHttpClient.followRedirects();
        }
        return okHttpClient;
    }
    //Retrofit设置
    private Retrofit getRetrofit() {
        if (null == retrofit) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())//设置数据解析器
                    .client(getOkHttpClient())
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//网络适配,支持RxJava与RxAndroid
                    .build();
        }
        return retrofit;
    }
    //接口
    public ApiService getApiService() {
        if (null == apiService)
            apiService = getRetrofit().create(ApiService.class);
        return apiService;
    }
}

API接口
public interface ApiService {
    // 因为上面的方法封装中把url写全了,这里的post里面写个【/】,这里不能为空
    @POST("/")
    Observable<数据Bean> postBeanData(@Body RequestBody requestBody);

}
使用
//首先创建一个Bean保存数据
String json = new Gson.toJson(数据Bean);
//代码调用
ApiService apiService = RetrofitClient.getInstance().getApiService();
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType, json);
apiService.postBeanData(requestBody).subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Observer<SensorBean>() {
            @Override
            public void onSubscribe(Disposable d) {

            }
            @Override
            public void onNext(SensorBean value) {
                Log.e("api", "上传的数据:" + value.toString());
            }
            @Override
            public void onError(Throwable e) {
                Log.e("api", "上传错误信息返回:" + e.toString());
            }
            @Override
            public void onComplete() {
            }
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Android】RxJava+Retrofit+OKHttp3实现数据上传 的相关文章

随机推荐

  • java基于winbox 工具下使用 api获取映射表api数据

    Winbox 是基于 windows下远程管理 ROS的软件 提供直观方便的图形界面 用它能登陆路由器 这个路由器是软路由ROUTEOS制作的 用Winbox登陆后 就可以配置路由器了 用这个软件便于配置路由器 Winbox控制台使用TCP
  • 如何利用今日头条极速版挣点小钱

    红包 1元现金速撸 红包 下载 今日头条极速版 进入 任务 填邀请码 1386552161 即可立即提现1元到支付宝 每天阅读 睡觉 签到 走路都有钱领
  • C++类和对象——(对象的赋值拷贝构造函数)

    目录 对象的赋值 目录 对象的赋值 1 提出问题 2 解决办法 拷贝构造函数 1 拷贝构造函数的原型 2 调用机制 3 使用例程代码 总代码工程 对象的赋值 1 提出问题 能否使用一个已经构造好的对象去初始化另一个对象 C 编译器又是如何处
  • 明日方舟服务器不稳定,《明日方舟》服务器恢复正常 补偿玩家400玉+40理智

    原标题 明日方舟 服务器恢复正常 补偿玩家400玉 40理智 此前我们曾报道 明日方舟 进不去 登微博热搜 官方表示正在紧急修复 现在 明日方舟 官方表示之前出现的问题已于18 00完成相关修复并已逐步恢复正常 将为受波及的玩家发放400合
  • Java 创建文件,文件夹不存在时,如何创建

    创建文件 String url C Users yz Desktop test new File String format s s s url test txt createNewFile 如果文件夹路径不存在则会报如下错误 正确代码 S
  • C++学习(四八三)无法从“std::pair<const _Kty,_Ty>”转换为“_Objty”

    使用vs2017编译osgEarth2 9的FeatureSourceIndexNode cpp遇到的 使用VS2017编译osgEarth2 7过程中遇到问题总结 justslowdown going的博客 CSDN博客 gt gt xm
  • 去除快捷方式箭头_桌面快捷方式小箭头去除与恢复方法

    电脑桌面的快捷方式图标默认都带有小箭头 不知道是不是自己心情不好 总之越看越不爽 今天我将出一期教程专门对付这个小箭头 去除或者保留 由我做主 去除小箭头方法 方法一 1 在键盘上按 win R 输入 regedit 点击 确定 2 鼠标右
  • WPF 样式 Style 封装

    从上面截图可以看出有三个圆形的 Button 他们的大小和鼠标悬停的效果一样 只是颜色各有不同 所以在实际的开发过程中最好是能够将样式模板封装起来 这样做减少了代码冗余 在开发过程中 如有相同的按钮样式实现直接应用就可以了 后期也利于阅读和
  • samba3.0 详细配置实例

    现在做了部分改动 并添加了mysql虚拟用户 还有补充了samba中批量增加用户的脚本 Samba3 0服务器实战调试 Centos5预装的samba已经是Samba版本3 0 23c 功能已经非常强大了 今天我们调试的重点不是samba3
  • Messari:21年第二季度Web3及NFT报告

    注 原文来自Messari 以下为全文编译 如果今年年初 有人走到我面前说 NFT的销售额将轻松超过10亿美元 GaryVee将推出NFT项目 Axie Infinity将成为五大NFT市场之一 我会回答 我会相信其中之一 但是 过去的一个
  • golang web开发获取get、post、cookie参数

    golang web开发获取get post cookie参数 在成熟的语言java python php要获取这些参数应该来讲都非常简单 过较新的语言golang用获取这些个参数还是费了不少劲 特此记录一下 golang版本 1 3 1
  • chrome浏览器开发者工具network屏蔽网络请求的方法

    在使用开发者工具调试的时候 有的网页有一堆轮询的无关紧要的请求 密密麻麻的影响我们调试 所以我们可以在network面板把他们都屏蔽掉 屏蔽之后 这个请求就不会被发出了 注意 如果这个请求含有重要功能 那么就不建议屏蔽了 要不网页会崩溃 1
  • 远程桌面访问软件:TeamViewer

    TeamViewer介绍 提起远程软件 很多朋友第一个想到的肯定是QQ远程 但是肯定也有朋友会发现 QQ远程用起来并不是那么流畅 今天向大家推荐一款简单 易用 无比流畅的远程软件 TeamViewer 这是一款全球著名的远程软件 很多大公司
  • Keil 逻辑分析 Logic Analyzer 窗口 realview mdk 逻辑分析 窗口 监视 IO 引脚状态

    Keil 逻辑分析 Logic Analyzer 窗口 realview mdk 逻辑分析 窗口 监视 IO 引脚状态 找了好久没找到怎么查看IO引脚的逻辑时序图 帮助里也没有介绍 最后还是让我找到了 哈哈 点菜单 VIEW gt symb
  • Selenium元素定位方法

    前提 必须定位到唯一元素 1 id定位 driver find element by id kw send keys 日历 2 name定位 driver find element by name wd send keys 杰森 3 cla
  • mysql判断日期写法

    mysql判断时间是否是当天 昨天 今天 select count 1 from sign detail where date format create time Y m d date format now Y m d and membe
  • 如何分辨NMOS和PMOS的电路符号

    这个是N沟道增强型MOS管的电路符号 这个是P沟道增强型MOS管的电路符号 有时我们很容易把这两个符号弄混 首先对于单个MOS管而言内部衬底和源极是接在一起的 所以我们看到的MOS管电路符号 源极和衬底是接在一起的 并且这个箭头处的电极为衬
  • 通过RS485进行modbus通讯协议

    一 协议介绍 普通串口挂载485芯片 使用modbus协议来传递信息 modbus 也有ASCII和 RTU之分 这是他们之间的区别 协议 开始标记 结束标记 校验 传输效率 程序处理 ASCII 冒号 CR LF LRC 低 直观 简单
  • 动态贝叶斯网络DBN

    贝叶斯网络 贝叶斯网络 Bayesian Networks 也被称为信念网络 Belif Networks 或者因果网络 Causal Networks 是描述数据变量之间依赖关系的一种图形模式 是一种用来进行推理的模型 贝叶斯网络为人们提
  • 【Android】RxJava+Retrofit+OKHttp3实现数据上传

    依赖引入 Gson implementation com squareup retrofit2 converter gson 2 1 0 OkHttp3 implementation com squareup okhttp3 okhttp