前回のおさらい
前回は、Android OSに搭載されているリレーショナルデータベースシステム「SQLite」に関して、以下を学びました。
具体的には、
- テーブルの作成
- アップグレード処理
- レコードの追加
- レコードの更新
- レコードの読み出し
の説明しました。使いこなすには、SQL文の学習が必要になりますが、SQLiteのライブラリは簡単に使うことができるので、サンプルプログラムを修正するなどして、自分のものにしてください。
ネットへ接続する
スマートフォンは手軽にネットワークへ接続できるので、Webサービスと連携したり、複数のWebサービスをマッシュアップする等、ネットワークへの接続を前提とするアプリを開発するケースが多くなるはずです。そこで、今回は、ネットワークへの接続方法をご説明します。
ネットワークへの接続と言っても様々ありますが、今回は、最も汎用性の高いHTTP通信を取り上げます。
利用するライブラリ
Android OSでHTTP通信を行う場合、android.net.http、org.apache.httpなど、複数のクラスライブラリから好みのものが使えますが、今回は、org.apache.httpを使って、HTTPプロトコルのGET, POSTメソッドの実装方法をご紹介します。
アプリからインターネットへ接続する場合は、AndroidManifest.xmlに以下の記述を追加して、インターネット接続への許可を与えてください。
GETメソッドの実装
以下は、GETメソッドの実装例です。
doGetメソッドは、第一引数にURLを指定して実行すると、実行結果を文字列で返します。
では、詳しく見ていきます。
まずは、HttpGetクラスの第一引数にURLを指定してクラスを生成して、GETメソッドを使用する準備を行います。
続いて、DefaultHttpClientクラスを生成します。
GETメソッドを実行するには、DefaultHttpClientのexecuteメソッドを呼び出します。
第一引数には、最初に生成したHttpGetを指定します。
executeメソッドを実行すると、レスポンスコードを返します。
以下のように返値を評価し、正しく実行された確認します。例では、正しく実行されなかったらthrowしています。
executeメソッドが正しく実行されたら、以下のように結果を文字列に変換して、returnで返しています。
POSTメソッドの実装
POSTメソッドの実装は、以下のようになります。
doPostメソッドは、第一引数にURL、第二引数にパラメーターを指定して実行すると、結果を文字列で返します。
では、詳しく見ていきます。
まずは、HttpPostクラスの第一引数にURLを指定してクラスを生成して、POSTメソッドを使用する準備を行います。
次に、Content-Typeヘッダに「application/x-www-form-urlencoded」を指定して、POSTするデータをx-www-form-urlencoded形式で送信するようにします。
以降の実装は、GETメソッドと大差ありませんが、以下のようにDefaultHttpClientのexecuteメソッドを呼び出します。
executeメソッドを実行するとレスポンスコードを返すので、正しく実行された確認します。
最後は、以下のように結果を文字列に変換して、returnで返しています。
Webサービスと連携する
HTTPプロトコルのGETとPOSTの実装方法が把握できたので、さらに歩踏み込んでWebサービスとの連携例をご紹介します。
Webサービスと連携する場合、データなどのやりとりにXMLを用いるのが一般的です。
Android OSには、XMLパーサの「SOX」が搭載されているので、これでXMLが取り扱えますが、スマートフォンにとってXMLの解析処理は重荷で、大量のデータを解析する場合は処理時間がかかります。
Android OSには、JSONパーサも搭載されているので、連携先がJSONにも対応しているのであれば、こちらを使うことをお勧めします。JSONは、XMLと比較するとデータの表現が単純なので、大量のデータでも処理負荷が低く短時間で処理が行えるので、スマートフォン向きです。また、データ表現が単純な分、プログラム単純になるので、処理速度面だけではなく、品質や保守性を向上させる意味でも有利になります。
参考として、以下にJSON形式のデータを処理している例を示します。
まとめ
今回は、org.apache.httpを使い、以下のご説明をしました。
- GETメソッドの実装
- POSTメソッドの実装
- Webサービスとの連携例
GET、POSTメソッドの実装は簡易なサンプルでしたが、共通部分が多いので実装方法を理解して頂けたと思います。
Webサービスとの連携例では、XMLではなくJSONを使うことをお勧めしました。
実際、筆者が開発に関係しているNetaShareでも、XMLからJSONに移行したことで、パフォーマンス向上が見られたので、連携先が対応しているのであればJSONがお勧めです。