RxJava在网络请求中的应用

利用RxJava实现串行请求

class Serial {
    class Student constructor(var id: Int) {
    }

    fun request1(): Observable<Student> {
        return Observable.just(Student(123))
    }

    fun request2(index: Int): Observable<String> {
        return Observable.just("str" + index)
    }

    fun request() {
        request1().filter {
            // 对请求1结果做预处理
            if (it == null) {
                false
            } else {
                Log.d("haha", "request1:index:" + it.id)
                true
            }
        }.map(Function<Student, Int>() {
            it.id
        }).flatMap(Function<Int, Observable<String>>() {
            request2(it)
        }).subscribe({
            Log.d("haha", "final result:" + it)
        }, {

        })
    }
}

运行结果:
在这里插入图片描述

利用RxJava实现并行请求,一起返回结果

class Parallel {
    class Student constructor(var name: String) {}
    class Teacher constructor(var name: String) {}
    class Book constructor(var name: String, var price: Int) {}

    fun requestStudent(): Observable<Student> {
        return Observable.just(Student("学生:小明"))
    }

    fun requestTeacher(): Observable<Teacher> {
        return Observable.just(Teacher("教师:老王"))
    }

    fun requestBook(): Observable<Book> {
        return Observable.just(Book("数学书", 18))
    }

    fun request() {
        Observable.zip(
            requestStudent(),
            requestTeacher(),
            requestBook(), Function3<Student, Teacher, Book, String>({ t1, t2, t3 ->
                "student:" + t1.name + "\nteacher:" + t2.name + "\nbook:" + t3.name
            })
        ).subscribe({
            Log.d("haha", "subscribe it:\n" + it)
        }, {

        })
    }
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值