このページにアクセスし、レスポンスボディを取得してその文字列を直接画面に表示するアプリを作れ。Activityの名前はMainActivity
とする。通信はメインスレッド上で同期的に行う。
Android 3.0 からメインスレッドで通信を行うとNetworkOnMainThreadExceptionが発生するようになったそうなので、Android 2.3.3のエミュレータを利用してやること。この練習問題集の目的はJSONの処理、リストビューの利用、複数のアクティビティの利用なので、マルチスレッド処理についてはまだできなくてよい。
参考: Android 4.0での通信処理とスレッド : diary
- HTTP通信の利用
練習アプリ1-1を改良し、取得したレスポンスボディをJSONとして解析し、各プロパティの内容をあらかじめ画面に設置しておいたコンポーネントに表示するようにせよ。
あらかじめ画面に設置しておくコンポーネントとその表示形式は、
name
: ラベルdescription
: テキストボックスplayed_count
: ラベルachieved_count
: ラベルstart_location
: ラベル * 2 (緯度と経度でそれぞれ別のラベルを使う)created_at
: ラベル ("2013年7月5日 21時4分" というような形式で表示する)
とする。
- JSONの解析 (JSONObject)
- テキスト処理 (コンマ区切りデータ)
- 日付処理 (ISO 8601 の日付形式)
練習アプリ1-2を改良し、HTTP通信を非同期で行うようにせよ。また、通信中は画面上にロード中を意味する画像またはテキストを表示しておくこと。難易度高めなのであとでやるとよい。
- AsyncTaskの利用
- 状態の管理
- 画像の利用
このページにアクセスし、JSON配列を取得して最初の要素と最後の要素を文字列化してそれぞれ別のラベルに表示するアプリを作れ。
- JSON配列の利用
練習アプリ2-1を改良して、取得したJSON配列からそれぞれの要素のname
を取り出してリストビューに表示するアプリを作れ。リストビューの項目のレイアウトはandroid.R.layout.simple_list_item_1
を用いるとする。またリストビューのアダプターはArrayAdapter<String>
を用いるとする。
- ListViewの利用
練習アプリ2-2を改良して、リストの項目がタップされたらその項目のdescription
をToastで表示するアプリを作れ。取得したルートのリストはActivityのフィールドにセットしておけばよい。
- OnItemClickListenerの利用
練習アプリ2-3を改良して、リストの項目がタップされたら別のアクティビティ(RouteDetailActivity
とする)を起動して、そこにルートのdescription
を表示するアプリを作れ。文字列はIntentのputExtraを使ってRouteDetailActivity
へ送ること。
- 別アクティビティの利用
- 別アクティビティとのデータの送受信
練習アプリ2-4のRouteDetailActivity
を改良して、練習アプリ1-2のようにルートの他のプロパティも表示するようにせよ。ルートのデータはJSON文字列にして送ること。
- 別アクティビティとのデータの送受信
- JSONオブジェクトの文字列化
練習アプリ2-5を改良して、ルートのデータをParcelableとして送るようにせよ。
- Parcelableの実装
練習アプリ2-2または練習アプリ2-5を改良して、ArrayAdapter<String>
ではなく自作のアダプター(RouteListAdapter
とする)を用いるようにせよ。
- Adapterの実装
練習アプリ3-1を改良して、android.R.layout.simple_list_item_1
ではなく自作のレイアウト(R.layout.list_item_route
とする)を用いるようにせよ。
- リストビューの項目で用いるレイアウトの作成
練習アプリ3-2のRouteListAdapter
とR.layout.list_item_route
を改良して、name
、description
、start_location
をそれぞれラベルで表示するようにせよ。
- リストビューの項目で用いるレイアウトの作成
- Adapterの実装
Google Maps Android API v2 になってMapViewが使えなくなったので、今のところはまだやらなくてよい。
練習アプリ1-2を改良して、start_location
をラベルではなくMapViewで表示するように変更せよ。
MapViewの利用