Step2 HTTP通信プログラムの作成
1.プロジェクトの作成
HTTP通信によってHTMLファイルを取得し、その内容を表示するプログラムを作成します。
それでは、第一回と同様にプロジェクトの作成を行いましょう。
各設定項目は以下のように指定してください
プロジェクト名 | GetHTML |
Build Target | Android 2.1-update1 |
Application name | GetHTML |
Package name | com.example.gethtml |
Activity | main |
Min SDK Version | 7 |
作成したプログラムを実行すると
「Hello World, main!」
と表示される事が確認できると思います。今回は、この表示部分に取得したHTMLファイルの内容を表示します。
2.TextViewの操作
第2回の内容で確認したように、TextViewの表示内容はmain.xmlで指定されるリソースの内容となっています。このままではプログラムで表示内容を変更することが出来ません。そこでまず、TextViewにIDを割り振り、TextViewオブジェクトを取得できるようにします。取得したオブジェクトのメソッドを使って表示内容の変更をします。
TextViewへのIDの割り振りはmain.xmlで行います。main.xmlのソースを開き、TextViewの内容を以下のように変更します。
<TextView android:id="@+id/view" android:layout_width="fill_parent" android:layout_height="wrap_content" /> |
変更内容はtext指定の削除とIDの追加の2点です。ここで指定したID を使うことでTextViewのオブジェクトを取得することが出来ます。
TextViewオブジェクトを取得し、表示内容の変更を行うプログラムは以下のようになります。
public class main extends Activity { private TextView mView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mView = (TextView) findViewById(R.id.view); mView.setText(new String("プログラムで指定するテキスト")); } } |
findViewByIdの引数にmain.xmlで指定したIDを与えることでオブジェクトを取得します。
取得したTextViewオブジェクトのメソッドsetTextで表示する内容を指定します。
プログラムの実行結果は以下のようになります。これでプログラム内で表示内容を変更する準備が出来ました。
3.httpGetメソッドの作成
次に、今回の内容のキモとなるhttpGetメソッドを作成します。ここでは引数のstrURLにリクエストを行い、レスポンスをstreamで取得しています。今回は得られたデータをString型のdataにまとめて戻り値として返します。
プログラムは以下のようになります。
public static String httpGet(String strURL) { // (1)try-catchによるエラー処理 try { // (2)URLクラスを使用して通信を行う URL url = new URL(strURL); URLConnection connection = url.openConnection(); // 動作を入力に設定 connection.setDoInput(true); InputStream stream = connection.getInputStream(); BufferedReader input = new BufferedReader(new InputStreamReader( stream)); // (3)データの取得 String data = ""; String tmp = ""; while ((tmp = input.readLine()) != null) { data += tmp; } // (4)終了処理 stream.close(); input.close(); return data; } catch (Exception e) { // (5)エラー処理 return e.toString(); } } |
(1)try-catchによるエラー処理
try-catch構文は、tryの内容を実行していき、エラーが生じた際にcatchの内容に移動してエラー処理を行う事ができるというものです。
(2)URLクラスを使用して通信を行う
通信にはURLクラスを使用します。コンストラクタの引数に通信を行いたいURLを指定します。次にopenConnectionを使って
URLConnectionオブジェクトを生成します。データの取得をおこなうために、setDoInputでtrueを設定し、getInputStreamで入力ストリーム
を取得します。得られたストリームをバッファリーダーを使用して取り出します。
(3)データの取得
バッファリーダーによって1行ずつデータを取得します。ここでは取得したデータをひとつにまとめて、バッファの内容が殻になった時点で、
データの取り出しを終了します。
(4)終了処理
終了処理ではバッファ、コネクションをクローズし、取得したデータを返します。
(5)エラー処理
ここではエラーの内容を文字列として返すことにします。
3.AndroidManifestへの追記
アプリで通信機能を使えるようにするためにAndroidManifestの編集を行います。プロジェクトの直下に存在するAndroidManifest.xmlを開きます。今回はxmlファイルを直接編集します。タブのAndroidManifest.xmlを選択し以下の内容を追記することで通信が行えるようになります。
<uses-permission android:name="android.permission.INTERNET"></uses-permission> |
4.プログラムの実行
作成したhttpGetメソッドを以下のような形で使用します。
mView.setText(new String(httpGet("http://www.yahoo.co.jp"))); |
実行結果は以下のようになります。
これでHTTP通信によるHTMLファイルの取得が出来ました。通信によるデータの取得は比較的簡単に行う事が分かったと思います。この機能によってWEBサイトで公開されている情報を利用した様々な応用が期待できます。しかし、これらのデータを使うには必要な情報を取得するスクレイピングという解析作業を行う必要ある事、HTMLの形式が頻繁に変更される可能性がある事、スクレイピング自体を禁止しているサイトがある事などから敷居が低いとは言えません。そこで、会社などから提供されるWEB APIを使用したアプリケーションの作成を行ないたいと思います。
第3回 通信するアプリを作ってみよう(前編)
Step1 通信プログラムの流れ
Step2 HTTP通信プログラムの作成
Step3 Web APIとは
Step4 Yahoo! JAPAN® 提供のWeb APIを使用したデータ取得