Skip to content

Instantly share code, notes, and snippets.

@i09158knct
Last active December 19, 2015 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save i09158knct/5945751 to your computer and use it in GitHub Desktop.
Save i09158knct/5945751 to your computer and use it in GitHub Desktop.
もっといいやつ → http://alpha.mixi.co.jp/2013/11726/

練習アプリ1-1

このページにアクセスし、レスポンスボディを取得してその文字列を直接画面に表示するアプリを作れ。Activityの名前はMainActivityとする。通信はメインスレッド上で同期的に行う。

Android 3.0 からメインスレッドで通信を行うとNetworkOnMainThreadExceptionが発生するようになったそうなので、Android 2.3.3のエミュレータを利用してやること。この練習問題集の目的はJSONの処理、リストビューの利用、複数のアクティビティの利用なので、マルチスレッド処理についてはまだできなくてよい。

参考: Android 4.0での通信処理とスレッド : diary

ポイント

  • HTTP通信の利用

練習アプリ1-2

練習アプリ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' (任意)

練習アプリ1-2を改良し、HTTP通信を非同期で行うようにせよ。また、通信中は画面上にロード中を意味する画像またはテキストを表示しておくこと。難易度高めなのであとでやるとよい。

ポイント

  • AsyncTaskの利用
  • 状態の管理
  • 画像の利用

練習アプリ2-1

このページにアクセスし、JSON配列を取得して最初の要素と最後の要素を文字列化してそれぞれ別のラベルに表示するアプリを作れ。

ポイント

  • JSON配列の利用

練習アプリ2-2

練習アプリ2-1を改良して、取得したJSON配列からそれぞれの要素のnameを取り出してリストビューに表示するアプリを作れ。リストビューの項目のレイアウトはandroid.R.layout.simple_list_item_1を用いるとする。またリストビューのアダプターはArrayAdapter<String>を用いるとする。

ポイント

  • ListViewの利用

練習アプリ2-3

練習アプリ2-2を改良して、リストの項目がタップされたらその項目のdescriptionをToastで表示するアプリを作れ。取得したルートのリストはActivityのフィールドにセットしておけばよい。

ポイント

  • OnItemClickListenerの利用

練習アプリ2-4

練習アプリ2-3を改良して、リストの項目がタップされたら別のアクティビティ(RouteDetailActivityとする)を起動して、そこにルートのdescriptionを表示するアプリを作れ。文字列はIntentのputExtraを使ってRouteDetailActivityへ送ること。

ポイント

  • 別アクティビティの利用
  • 別アクティビティとのデータの送受信

練習アプリ2-5

練習アプリ2-4のRouteDetailActivityを改良して、練習アプリ1-2のようにルートの他のプロパティも表示するようにせよ。ルートのデータはJSON文字列にして送ること。

ポイント

  • 別アクティビティとのデータの送受信
  • JSONオブジェクトの文字列化

練習アプリ2-5' (任意)

練習アプリ2-5を改良して、ルートのデータをParcelableとして送るようにせよ。

ポイント

  • Parcelableの実装

練習アプリ3-1

練習アプリ2-2または練習アプリ2-5を改良して、ArrayAdapter<String>ではなく自作のアダプター(RouteListAdapterとする)を用いるようにせよ。

ポイント

  • Adapterの実装

練習アプリ3-2

練習アプリ3-1を改良して、android.R.layout.simple_list_item_1ではなく自作のレイアウト(R.layout.list_item_routeとする)を用いるようにせよ。

ポイント

  • リストビューの項目で用いるレイアウトの作成

練習アプリ3-3

練習アプリ3-2のRouteListAdapterR.layout.list_item_routeを改良して、namedescriptionstart_locationをそれぞれラベルで表示するようにせよ。

ポイント

  • リストビューの項目で用いるレイアウトの作成
  • Adapterの実装

練習アプリ4-1

Google Maps Android API v2 になってMapViewが使えなくなったので、今のところはまだやらなくてよい。

練習アプリ1-2を改良して、start_locationをラベルではなくMapViewで表示するように変更せよ。

ポイント

  • MapViewの利用
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
}
[
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "町の探索",
"description": "町を探索する。\n難易度低め。",
"played_count": 182,
"achieved_count": 120,
"start_location": "35.689521,139.691704",
"created_at": "2013-07-18T01:56:39.550Z"
},
{
"name": "森の探索",
"description": "森を探索する。\n難易度高め。<strong>HTMLタグは使用できない。</strong>",
"played_count": 1,
"achieved_count": 1,
"start_location": "35.340149,135.043444",
"created_at": "2010-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
},
{
"name": "裏山の探索",
"description": "裏山を探索する。\n難易度高め。",
"played_count": 12,
"achieved_count": 2,
"start_location": "34.340149,134.043444",
"created_at": "2013-07-08T01:56:39.550Z"
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment