Androidアプリ開発の教科書 [ WebAPI ]
目次
必要な項目
- 非同期(AsyncTask)
- HTTP通信(HttpURLConnection)
非同期(AsyncTask)
非同期とは、データを転送する際に、送信側と受信側のタイミングの一致を気にせずにデータをやりとりすることがである。
今回は取得したデータをUIに反映させるので、UIスレッドとのやりとりが頻繁に行われる。そのため、今回はAsyncTaskを使用してあげる。
ざっと必要になるもの
- AsyncTask
AsyncTask
AsyncTaskでは、ユーザー インターフェースに非同期の処理を実行できます
初期のメソッド
- doInBackground
- バックグラウンドでの処理を記述
- onPostExecute
- UIスレッドで処理
流れ
- AsyncTaskを継承したクラスを作成する
- 非同期で行いたい処理記述(
doInBackground()
) - UIスレッドで行いたい処理記述(
onPostExecute()
) - execute()する
スレッドの知識(参考)
スレッドについて(メインスレッド)公式引用
- アプリケーション起動の際、システムは アプリケーション実行用のスレッドを作成します。これは、「メイン スレッド」と呼ばれます。
- イベント(描画イベントを含む)を適切なユーザー インターフェース ウィジェットに送信する役割を担うため非常に重要です。
- メイン スレッドは UI スレッドと呼ばれることもあります。
- コンポーネントのインスタンスごとに別のスレッドが作成されることはありません
スレッドを分ける理由 公式引用
- すべてが UI スレッドで行われている場合、'時間のかかる操作'を実行すると UI 全体をブロックしてしまいます。
- スレッドがブロックされると、描画イベントを含むすべてのイベントを送信できなくなります。
- ユーザー側には、アプリケーションがハングしたように見えます。
- UI スレッドが数秒以上(現時点では 5 秒以上)ブロックされると、ユーザーに「アプリケーションが応答していません」のダイアログが表示されます。
※時間のかかる操作:ネットワークへのアクセスやデータベースへの問い合わせなど
HTTP接続(HttpURLConnection)
HTTP接続とは、WebサーバとWebクライアントの間でデータの送受信を行うために使用されるプロトコルを使用した通信。
ざっと必要になるもの
- URLオブジェクト(HttpURLConnectionの材料)
- HttpURLConnectionオブジェクト(HTTP接続してくれる)
- is2String(文字化け直してくれる)
流れ
- URLオブジェクト作成(HttpURLConnectionの材料となるURLを作成する)
- HttpURLConnectionオブジェクト取得:
openConnection()
- http接続メソッドを指定:
setRequestMethod()
- 接続 -> HttpURLConnectionにレスポンスデータが格納される:
connect()
- InputStreamオブジェクトを取得(レスポンスデータ取得してくれるやつ)
getInputStream()
- レスポンスを文字列に変換する必要がある:
is2String ()
- レスポンスを文字列に変換する必要がある:
- http接続メソッドを指定:
is2String
is2Stringは、InputStreamオブジェクトを文字列に変換するメソッドでJavaの定型文なのでこれコピペで十分。(現段階では。。)
throwsで変換に失敗した時に例外をキャッチしてる。
private String is2String(InputStream is) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); StringBuffer sb = new StringBuffer(); char[] b = new char[1024]; int line; while(0 <= (line = reader.read(b))) { sb.append(b, 0, line); } return sb.toString(); }