2017-05-30 square/retrofit でのエラーハンドリング
Android の通信処理。2017-05-22 にも書いたとおり square/retrofit を使っている。
retrofit のエラーハンドリングはぼくにはやや非直感的だ。 Response クラスの body() と errorBody() が分離されている。 body() 側は自動で変換されるが、 errorBody() 側はされない。
どういう設計判断なのかは分からない。例外側をひとつのクラスに特定できるか迷っているのかもしれない。 Response<Result<OK,NG>> のようにすればいいだけのように思うのだけど、そうできないのはレスポンスボディのみで変換しているからなのか。そういう形を強制するのは良くないと思ったのか。何かしらの判断があるのだろう。
結果として Response の isSuccessful() を見て body() と errorBody() の両方をそれぞれ解釈しないといけない。具体的な方法は次のような内容が山ほどある。
Retrofit 2 — Simple Error Handling
こんなことをするくらいなら converter を分離したほうが良いと思うのだけど……。