有A,B,c 3个网络请求,先发起A网络请求,再在主线程执行A的回调:若成功则刷新view数据并在io线程发起B的网络请求操作。若失败弹出提示。B执行成功则UI线程执行B回调,然后IO
线程发起C请求.依次类似。代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50private fun queryDetailAndSignForAndFeedBack(eventId: String) {
val dataSource = EventWarningDataSource()
val reqDetail = getDetailReq(eventId)
dataSource.queryEventDetail(reqDetail)
.compose(this.bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(Consumer {
if (it.code == 0) {
view.successQueryDetail(it.data!!)
}else{
view.failedQuery("detail", "明细查询: $it")
}
})
.observeOn(Schedulers.io())
.flatMap {
if (it.code == 0) {
val reqSignFor = getSignForOrFeedBackReq(eventId, "1")
return@flatMap dataSource.getSignForOrFeedBack(reqSignFor)
}
Observable.just(it)
}
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(Consumer {
if (it.code == 0) {
val ret = it as Result<ListResult<EventGetSignForListBean>>
val list = if(ret.data == null || ret.data!!.rows == null) mutableListOf() else ret.data!!.rows!!
view.successQuery("1", list)
}else{
view.failedQuery("detail", "明细查询: $it")
}
})
.observeOn(Schedulers.io())
.flatMap {
if (it.code == 0) {
val reqFeedBack = getSignForOrFeedBackReq(eventId, "2")
return@flatMap dataSource.getSignForOrFeedBack(reqFeedBack)
}
Observable.just(it)
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{
if (it.code != 0) {
view.failedQuery("feedBack", "反馈查询: $it")
return@subscribe
}
val ret = it as Result<ListResult<EventGetSignForListBean>>
val list = if(ret.data == null || ret.data!!.rows == null) mutableListOf() else ret.data!!.rows!!
view.successQuery("2", list)
}
}
先发起查询事件预警明细的网络请求:getDetailReq,若成功则在UI线程执行回调:successQueryDetail,失败则执行failedQuery,然后切换回IO线程: .observeOn(Schedulers.io())
发起:获取签收信息的请求: getSignForOrFeedBackReq(为1表示获取签收,为2表示获取反馈).然后切换回UI线程: .observeOn(AndroidSchedulers.mainThread()) 执行签收的回调:
successQuery(这个list数据要填充到RecyclerView并显示),再切换回IO线程发起获取反馈的网络请求 getSignForOrFeedBackReq