当前位置: 首页 > 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.lryc.cn/news/609160.html

相关文章:

  • Kali基础知识点【1】
  • 基于图像识别与分类的中国蛇类识别系统
  • gitee使用教程
  • 电路原理图绘制专业实战教程2
  • 生成式人工智能展望报告-欧盟-04-社会影响与挑战
  • Java中手动床架一个线程池
  • [硬件电路-134]:模拟电路 - 运算放大器常见运算:两模拟信号相加、相减、单模拟信号的积分、微分...
  • template<typename R = void> 意义
  • 【Python练习】075. 编写一个函数,实现简单的语音识别功能
  • golang的包和闭包
  • slice() 和 splice()
  • 决策树模型知识点整理:从原理到实战(含可视化与调参)
  • Corrosion2靶机练习笔记
  • 【图像处理基石】如何使用deepseek进行图像质量的分析?
  • 【Django】-9- 单元测试和集成测试(上)
  • Day23--回溯--39. 组合总和,40. 组合总和 II,131. 分割回文串
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)
  • 深度学习中卷积与互相关
  • [ java Thread 线程 ] 由“一对一“到“一对多“
  • 【Linux网络编程基础--socket地址API】
  • 使用 Vuepress + GitHub Pages 搭建项目文档
  • GraphRAG:基于知识图谱的检索增强生成技术解析
  • 微分方程模型:用“变化率”的语言,描绘世间万物的动态演化
  • async/await和Promise之间的关系是什么?(补充)
  • 图像识别区分指定物品与其他物体
  • SelectDB数据库,新一代实时数据仓库的全面解析与应用
  • Kubernetes滚动更新、蓝绿部署与金丝雀发布方案对比分析及选型建议
  • 延迟任务方案-DelayQueue
  • noob靶机复现笔记
  • 【stm32】GPIO输入