vortispy's diary

日記です

Androidアプリをつくった覚書

アプリの概要

機能

boketeのようなアプリ。ユーザーがドヤ顔写真をアップロードしてその評価を競う。
必要なのはおよそ以下の機能

  • AWS S3へ画像のアップロード
  • Redisサーバへの登録
  • アプリでの評価をRedisサーバに反映する
  • 画像とその情報をアプリで取得する

画面の構成

一つの画面内にIMAGE LISTとRANKINGの二つのタブを表示する。それぞれのタブはリストでできている。
IMAGE LISTはリストの各要素に画像とその得点および評価ボタンを含む。
RANKINGは1位から10位までを表示し、各要素に画像、得点、順位を持つ。

やったことなど

ネットワーク通信はAsyncTaskを使う

Androidではメインスレッドで画像のアップロード、ダウンロード等の通信を行えない。なので通信を別スレッドで行うためにAsyncTaskを継承したクラスを実装しなければならない。とてもめんどくさい。それを楽にするためにAsyncTaskLoaderというのがあるらしいが使っていないので詳しくは知らない。
AsyncTaskと似たようやつでVolleyというのもあるらしい。
AsyncTaskを使った非同期処理のきほん | Developers.IO
ネットワーク通信用ライブラリVolleyを使いこなす | Tech Booster

リストビューのカスタマイズ

簡単なテキストだけのリストを作るならListViewとArrayAdapterをそのまま使えばよい。テキスト以外の要素をリストにするにはArrayAdapterを継承したクラスを実装する。最低限必要なのはgetViewだけなのでそれほど大変ではない。
現在はgetViewが呼ばれるたびに通信が発生する作りなので、最初に呼ばれたときのみ通信するようにすべきだ。
リストビューをカスタマイズする « Tech Booster
ArrayAdapterをつかったカスタムリスト - なか日記

タブの実装

ActionBarのタブナビゲーションを利用してタブを実装できる。これによりFragmentを切り替えれる。
アクションバーのタブ・ナビゲーション - Android 開発入門

Redis

今回はランキングを作りたかったのでSorted Setsを使った。ライブラリはJedis。

Github

とりあえずなんか実装するときはissueを作る。ブランチを作る。実装したらpull requestを送る。マージされたらissueを閉じる。
APIキーをうっかりプッシュしないように気をつける。