Androidでアプリを作った際の非同期通信を使った内容をまとめました。
今回はAsyncTaskを継承したクラスを作り、通信処理を行っています。
権限の追加
まずアプリからインターネットに接続するための権限をマニフェストファイルに追加します。
<uses-permission android:name="android.permission.INTERNET" />
マニフェストファイルは次の場所にあります。
/app/manifests/AndroidManifest.xml
非同期処理クラスの作成
非同期処理をするためにAsyncTaskを継承しています。
AsyncTaskのジェネリクスの、一番目の文字列はdoInBackground、三番目の文字列はonPostExecuteにそれぞれ渡される引数の型になります。
doInBackgroundでは通信処理を行なっています。
HttpURLConnectionクラスで送信するデータの設定を行います。
今回はJSONデータの送信を想定していたため、setRequestPropertyでJSONを指定しています。
※ただしこのサンプルではJSONの送信はしていません。
受信データもJSONを想定していたため、データはBufferedReaderにより文字列で受け取っています。
doInBackgroundの戻り値はonPostExecute関数に渡されます。
onPostExecuteは呼び出し側のActivityでオーバーライドされる、CallbackTaskクラスの関数を呼び出しています。
Activityからの呼び出し
Activityではこのように呼び出しています。
HttpResponseクラスのメンバクラスである、CallbackTaskクラスが持つ関数をオーバーライドしています。
このオーバーライドされた関数は最終的に、非同期処理で返ってきたデータを処理します。
最後に
今回はオーバーライドによって呼び出すActivity側に、データ受信後の処理を書くようにしました。
これにより各Activity内で個別の処理を記述することができます。
参考
今回のサンプルのPOST送信で使ったサービスの紹介ブログ
エンジニア1年目です。
日々勉強したことをまとめていきたいと思います。