2017-04-10 Android HttpURLConnection とか
bouzuya/bbna をつくっている。bbna: blog.bouzuya.net for Android 。いまは通信処理を書いている。よく分からないままに書いている。
Java は同期的に通信ができるので楽なのだけど、さすがにメインスレッドで通信処理はまずい。そこで別のスレッドで非同期に処理する。 Loader
というコンポーネントを使う。Loader
の一種である AsyncTaskLoader
を使う。
Loader
は Support Package の LoaderManager
経由で使っている。ひとつしかないのに LoaderManager
が要るのか分からないけど、再利用がどうとか書いてあるのでうまく管理してくれるのだろう。
LoaderManager
からの結果を受け取るために MainActivity
で LoaderManager.LoaderCallbacks
を実装する。
AsyncTaskLoader
の loadInBackground
では HttpURLConnection
を使って通信処理を書く。昔は HttpClient
がどうのこうのという記述を見かけるが、6.0 で削除されたらしい ので、 HttpURLConnection
を使う。サードパーティにもっと便利なのもありそうだけど、とりあえず標準で。
InputStream
って懐かしいな。そして面倒くさいな。InputStream
を InputStreamReader
で wrap して BufferedReader
で wrap して……。ああ面倒くさい。検査例外。 IOException
。面倒くさい。例外は Log.e()
を使いながら、とりあえず無視する。
String
に null
が含まれている……、うーん。……いま書いていて、そういえば、もう Java にも Maybe
相当の class
が備わっているような……。気にせず @Nullable
や @NonNull
をつけつつ進める。この annotation に意味があるのか……。
明日は JSON を parse する感じかな……。
そういえば、『スーパーマリオ ラン』のスペシャルコースを除いてすべてのカラーコインを集めた。
カラーコインはピンクコイン・パープルコイン・ブラックコイン。1 コースにつき 3 種類。 1 ワールドあたり 4 コースある。 6 ワールド。 3 * 4 * 6 = 72 。
最後は 4-1 ガリガリタワーのブラックコインだった。 2 枚目の P スイッチは二個目のブロックを飛び越えて反対側に行けば良かった。1 枚目と同様に時間がギリギリなので厳しい。 5 枚目も難しいが、シャボンを十分集めていれば何回か挑戦できるので、それほどでもなかった。