利用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)
}, {
})
}
}
運行結果