Android 之 RxJava2

​1.依赖配置​ ​(build.gradle

需添加以下依赖(确保版本兼容):

Groovy 复制代码
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
java 复制代码
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();

    @Override
    protected 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: 更新UI
                        error -> Toast.makeText(this, "请求失败: " + error.getMessage(), Toast.LENGTH_SHORT).show(), // onError
                        () -> Log.d("RxJava", "请求完成") // onComplete
                );

        compositeDisposable.add(disposable); // 统一管理订阅
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        compositeDisposable.clear(); // 防止内存泄漏
    }
}
相关推荐
crmscs18 分钟前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob21 分钟前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔25 分钟前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei99625 分钟前
flutter和Android动画的对比
android·flutter·动画
lxysbly2 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首3 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-19436 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs6 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&6 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
LDORntKQH6 小时前
基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2
android