2連続で通信する場合にhideProgressBar()を1回しか書かない
2020/11/09
APIを使ってデータを受信して、その結果を使って再度通信する必要がある場合。Kotlinならコルーチン使ったり、色々と工夫できると思うのですが、普通に書いた場合は通信部分が入れ子になりますね。そして、通信する度にエラー処理が必要なので、その度に開始したグルグル(Progress Bar)を止めないといけません。
例外処理のtryを使うと、失敗成功いずれもスレッドから抜けることをfinallyで検出できます。読みやすいか実用的かは別にして。
通信にFuelを使って直列に書くとこんな感じ。
val url = "URL of API"
// progressBar.visibility = View.VISIBLE するだけの自前メソッド
showProgressBar()
Thread {
try {
// 1回目の通信
val params1 = listOf(
"page" to "1"
)
val (_, _, result1) = url.httpGet(params1).responseString()
if (result1 is Result.Failure) {
return@Thread
}
val data1 = result1.get()
if (data1のパースに失敗したり空だった場合) {
return@Thread
}
// 2回目の通信
val params2 = listOf(
"page" to "1",
"some_value" to "1回目の通信で得た値"
)
val (_, _, result2) = url.httpGet(params2).responseString()
if (result2 is Result.Failure) {
return@Thread
}
val data2 = result2.get()
if (data2のパースに失敗したり空だった場合) {
return@Thread
}
// 成功時にはここで、データを保存したり、画面を更新させたりする
}
finally {
// 必ずUIスレッドで行う
hideProgressBar()
}
}.start()