如何使用 RxJava 检查 url 是否正常工作?
How to check if the url is working using a RxJava?
我有 json 回复 ["url1",""url2","url3"..."url10 “]
每个 url 包含图像的地址。
我使用此方法获得了这些 url 的列表:
@GET("task-m-001/list.php")
fun getItems(): Single<List<String>>
2 of 10 urls 不工作。我需要检查每个 url 和过滤器损坏。
我的方法:
fun getItems(){
_networkState.postValue(NetworkState.LOADING)
try {
compositeDisposable.add(
apiService.getItems()
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.flatMapObservable { items ->
Observable.fromIterable(items)
.flatMap{
//Here i need to check urls... How to do that?
}
}
.toList()
.subscribe({ urlList ->
Log.i(TAG, "getItems: $urlList")
val itemsResponse = itemsResponseConverter.getItemResponse(urlList)
_downloadedItemsResponse.postValue(itemsResponse)
_networkState.postValue(NetworkState.LOADED)
},
{
Log.i(TAG, "Error - $it")
_networkState.postValue(NetworkState.ERROR)
})
)
}catch (e: Exception) {
Log.e(TAG, e.message.toString())
}
}
如何使用 rxJava 做到这一点?
首先尝试使用 URL 和 HttpURL 连接请求图像 url 并获取响应代码。
如果图像有效,响应代码将为 200 否则无效
现在这是您的代码:
fun getItems(){
_networkState.postValue(NetworkState.LOADING)
try {
compositeDisposable.add(
apiService.getItems()
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.flatMapObservable { items ->
Observable.fromIterable(items)
.flatMap{
val url:URL = URL(imageUrl)
val http: HttpURLConnection: = url.openConnection() as HttpURLConnection
val statusCode: Integer = http.responseCode
return if(statusCode == 200) // correct image url
}
}
.toList()
.subscribe({ urlList ->
Log.i(TAG, "getItems: $urlList")
val itemsResponse = itemsResponseConverter.getItemResponse(urlList)
_downloadedItemsResponse.postValue(itemsResponse)
_networkState.postValue(NetworkState.LOADED)
},
{
Log.i(TAG, "Error - $it")
_networkState.postValue(NetworkState.ERROR)
})
)
}catch (e: Exception) {
Log.e(TAG, e.message.toString())
}
}
我有 json 回复 ["url1",""url2","url3"..."url10 “] 每个 url 包含图像的地址。 我使用此方法获得了这些 url 的列表:
@GET("task-m-001/list.php")
fun getItems(): Single<List<String>>
2 of 10 urls 不工作。我需要检查每个 url 和过滤器损坏。
我的方法:
fun getItems(){
_networkState.postValue(NetworkState.LOADING)
try {
compositeDisposable.add(
apiService.getItems()
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.flatMapObservable { items ->
Observable.fromIterable(items)
.flatMap{
//Here i need to check urls... How to do that?
}
}
.toList()
.subscribe({ urlList ->
Log.i(TAG, "getItems: $urlList")
val itemsResponse = itemsResponseConverter.getItemResponse(urlList)
_downloadedItemsResponse.postValue(itemsResponse)
_networkState.postValue(NetworkState.LOADED)
},
{
Log.i(TAG, "Error - $it")
_networkState.postValue(NetworkState.ERROR)
})
)
}catch (e: Exception) {
Log.e(TAG, e.message.toString())
}
}
如何使用 rxJava 做到这一点?
首先尝试使用 URL 和 HttpURL 连接请求图像 url 并获取响应代码。 如果图像有效,响应代码将为 200 否则无效
现在这是您的代码:
fun getItems(){
_networkState.postValue(NetworkState.LOADING)
try {
compositeDisposable.add(
apiService.getItems()
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.io())
.flatMapObservable { items ->
Observable.fromIterable(items)
.flatMap{
val url:URL = URL(imageUrl)
val http: HttpURLConnection: = url.openConnection() as HttpURLConnection
val statusCode: Integer = http.responseCode
return if(statusCode == 200) // correct image url
}
}
.toList()
.subscribe({ urlList ->
Log.i(TAG, "getItems: $urlList")
val itemsResponse = itemsResponseConverter.getItemResponse(urlList)
_downloadedItemsResponse.postValue(itemsResponse)
_networkState.postValue(NetworkState.LOADED)
},
{
Log.i(TAG, "Error - $it")
_networkState.postValue(NetworkState.ERROR)
})
)
}catch (e: Exception) {
Log.e(TAG, e.message.toString())
}
}