一个页面有多个网络请求,需等待全部请求完成后,做一进步处理(比如隐藏加载页面)
方案1:使用Rxjava中操作符zip
这种方法很方便,不仅可以监听全部完成的时刻,还可以对多个请求结果进进一步处理。
方案2:没有使用Rxjava情况下,自定义个变量并监听它的变化
情景:今天使用了喜马拉雅的SDK,其网络请求直接使用了OKHttp,请求格式如下:
CommonRequest.getAlbumList(HashMap<String, String>().apply {
put("category_id", categoryId)
put("calc_dimension", "1")//计算维度,现支持最火(1),最新(2),经典或播放最多(3
put("count", "6")
}, object : IDataCallBack<AlbumList?> {
override fun onSuccess(p0: AlbumList?) {
showHotAlbums(p0?.albums!!)
curStatus = curStatus xor STATUS_4
}
override fun onError(p0: Int, p1: String?) {
curStatus = curStatus xor STATUS_4
}
})
}
思路:
- 定义一个当前状态变量 curStatus
- 定义多个状态常量
- 对curStatus变化做监听
其实主要难点就是curStatus变化的监听,不过kotlin已经解决了这难点,代码如下:
//定义常量
companion object {
val STATUS_0 = 0
val STATUS_1 = 1
val STATUS_2 = 1 shl 1
val STATUS_3 = 1 shl 2
val STATUS_4 = 1 shl 3
val STATUS_COMPLETED = 15
}
//定义curStatus
var curStatus by Delegates.observable(STATUS_0) { property, oldValue, newValue ->
run {
when (newValue) {
STATUS_COMPLETED -> {
showNormal()
}
}
}
}
}
``
常量使用了二进制,可以多curStatus判断当前请求完成状态()
observable()方法,第一参数给初始值,第二个参数为属性变化时回调的函数。