当前位置: 首页 > news >正文

Android 之 RxJava2

​1.依赖配置​​(build.gradle
需添加以下依赖(确保版本兼容):
implementation 'io.reactivex.rxjava2:rxjava:2.2.20'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2.​​线程调度​
  • subscribeOn(Schedulers.io()):指定网络请求在IO线程(非主线程)执行,避免阻塞UI。
  • observeOn(AndroidSchedulers.mainThread()):将结果切换到主线程更新UI,否则会崩溃。
​3.操作符使用​
  • map():转换数据格式(如JSON解析),链式调用保持代码简。
  • 其他常用操作符:
    • flatMap():异步嵌套请求(如先登录后获取用户信息)。
    • filter():过滤无效数据。
    • zip():合并多个请求结果
4.示例场景:模拟网络请求获取数据,处理结果后更新 UI
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;public class MainActivity extends AppCompatActivity {private TextView tvResult;private CompositeDisposable compositeDisposable = new CompositeDisposable();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvResult = findViewById(R.id.tv_result);// 1. 创建 Observable(模拟网络请求)Observable<String> observable = Observable.create(emitter -> {try {Log.d("RxJava", "网络请求线程: " + Thread.currentThread().getName());Thread.sleep(2000); // 模拟网络延迟String data = "{\"name\":\"RxJava\", \"version\":2}"; // 模拟返回的JSON数据emitter.onNext(data); // 发送成功数据emitter.onComplete();} catch (Exception e) {emitter.onError(e); // 发送错误}});// 2. 订阅并处理结果Disposable disposable = observable.subscribeOn(Schedulers.io()) // 指定网络请求在IO线程执行.observeOn(AndroidSchedulers.mainThread()) // 指定结果处理在主线程.map(json -> { // 使用map操作符转换数据// 模拟JSON解析(实际可用Gson等库)return "解析结果: " + json.replace("\"", "");}).subscribe(result -> tvResult.setText(result), // onNext: 更新UIerror -> Toast.makeText(this, "请求失败: " + error.getMessage(), Toast.LENGTH_SHORT).show(), // onError() -> Log.d("RxJava", "请求完成") // onComplete);compositeDisposable.add(disposable); // 统一管理订阅}@Overrideprotected void onDestroy() {super.onDestroy();compositeDisposable.clear(); // 防止内存泄漏}
}

http://www.dtcms.com/a/312626.html

相关文章:

  • 电商系统定制开发流程:ZKmall开源商城需求分析到上线全程可控
  • Node.js (Express) + MySQL + Redis构建项目流程
  • C++ 入门基础(3)
  • 从零开始学Express,理解服务器,路由于中间件
  • Ubuntu20.04 Carla安装与和Ros联合仿真
  • OpenCV轻松入门_面向python(第一章OpenCV入门)
  • Kafka——怎么重设消费者组位移?
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十六天
  • 「iOS」————属性关键字底层原理
  • Jupyter Notebook 中高效处理和实时展示来自 OpenCV 和 Pillow 的图像数据探究
  • 网络缓冲区的设计以及C++实现
  • 【Python练习】075. 编写一个函数,实现简单的语音识别功能
  • 项目日记---高并发内存池整体框架
  • 人工智能与医疗健康:AI 助力医疗的新格局
  • 信号传播速度与延时
  • [硬件电路-143]:模拟电路 - 开关电源与线性稳压电源的详细比较
  • PLC传感器接线与输出信号接线
  • Redis实战(7)-- 高级特性 Redis Stream数据结构与基础命令
  • 【0基础PS】PS工具详解--文字工具
  • .NET 开源节点编辑器,将你的程序功能模块节点化
  • pytorch 安装
  • Paxos 算法是什么?介绍 RAFT 和 ZAB,以及它们之间的区别?会有脑裂问题吗?为什么?
  • 算法竞赛阶段二-数据结构(39)数据结构栈模拟实现
  • AI陪伴赛道,热闹背后是真需求还是泡沫?
  • 应急响应整理
  • Back to the Features:附录A
  • [创业之路-532]:知识、技能、技术、科学各自解决什么问题?
  • 手机(电脑)与音响的蓝牙通信
  • 15_01_opencv_形态学滤波
  • 动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)