2連続で通信する場合にhideProgressBar()を1回しか書かない

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()