blog.bouzuya.net

2017-04-10 Android HttpURLConnection とか

bouzuya/bbna をつくっている。bbna: blog.bouzuya.net for Android 。いまは通信処理を書いている。よく分からないままに書いている。

Java は同期的に通信ができるので楽なのだけど、さすがにメインスレッドで通信処理はまずい。そこで別のスレッドで非同期に処理する。 Loader というコンポーネントを使う。Loader の一種である AsyncTaskLoader を使う。

Loader は Support Package の LoaderManager 経由で使っている。ひとつしかないのに LoaderManager が要るのか分からないけど、再利用がどうとか書いてあるのでうまく管理してくれるのだろう。

LoaderManager からの結果を受け取るために MainActivityLoaderManager.LoaderCallbacks を実装する。

AsyncTaskLoaderloadInBackground では HttpURLConnection を使って通信処理を書く。昔は HttpClient がどうのこうのという記述を見かけるが、6.0 で削除されたらしい ので、 HttpURLConnection を使う。サードパーティにもっと便利なのもありそうだけど、とりあえず標準で。

InputStream って懐かしいな。そして面倒くさいな。InputStreamInputStreamReader で wrap して BufferedReader で wrap して……。ああ面倒くさい。検査例外。 IOException 。面倒くさい。例外は Log.e() を使いながら、とりあえず無視する。

Stringnull が含まれている……、うーん。……いま書いていて、そういえば、もう Java にも Maybe 相当の class が備わっているような……。気にせず @Nullable@NonNull をつけつつ進める。この annotation に意味があるのか……。

明日は JSON を parse する感じかな……。


そういえば、『スーパーマリオ ラン』のスペシャルコースを除いてすべてのカラーコインを集めた。

カラーコインはピンクコイン・パープルコイン・ブラックコイン。1 コースにつき 3 種類。 1 ワールドあたり 4 コースある。 6 ワールド。 3 * 4 * 6 = 72 。

最後は 4-1 ガリガリタワーのブラックコインだった。 2 枚目の P スイッチは二個目のブロックを飛び越えて反対側に行けば良かった。1 枚目と同様に時間がギリギリなので厳しい。 5 枚目も難しいが、シャボンを十分集めていれば何回か挑戦できるので、それほどでもなかった。