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)
        }, {

        })
    }
}

運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章