AndroidアプリケーションからWebにあるファイルを取得します。
注意
Android4でこの記事のコードを実行すると、"android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork"エラーが発生し動作しません。Android4でWebのファイルを取得する方法は
こちらの記事を参照してください。
アプリケーション作成情報
- ProjectName : HttpAccess
- ApplicationName : HttpAccess
- PackageName : iPentec.HttpAccess
- Activity : HttpAccessActivity
- Androidのバージョンは2.3.3にしました
UI
下図のUIを作成します。Buttonを1つ、TextViewを1つ配置します。Buttonの[OnClick]プロパティに[onClick_button1]を設定します。
パーミッションの設定
以下の手順で"android.permission.INTERNET"パーミッションを追加します。
EclipseでAndroidManifest.xmlを開きます。編集ウィンドウが表示されますので、下部の[Permissions]タブをクリックします。[Android Manigest Permissions]画面が表示されますので画面内の[Add...]ボタンを押します。
追加する要素を選択するダイアログが開きます。[Uses Permission]を選択し[OK]ボタンを押します。
[Uses Permission]が一覧に追加されます。
右側の[Name]コンボボックスを開きます。一覧から"android.permission.INTERNET"を選択します。
AndroidManifest.xmlに以下のタグが追加されます。
<uses-permission android:name="android.permission.INTERNET"/>
コード
以下のコードを実装します。
package iPentec.HttpAccess;
import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.widget.TextView;
import org.apache.http.*;
import org.apache.http.util.*;
import org.apache.http.impl.client.*;
import org.apache.http.client.methods.*;
public class HttpAccessActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void onClick_button1(View view) {
try {
String url = "http://www.ipentec.com/document/";
HttpGet httpGet = new HttpGet(url);
DefaultHttpClient httpClient = new DefaultHttpClient();
httpGet.setHeader("Connection", "Keep-Alive");
HttpResponse response = httpClient.execute(httpGet);
int status = response.getStatusLine().getStatusCode();
if (status != HttpStatus.SC_OK) {
throw new Exception("");
} else {
String receive = EntityUtils.toString(response.getEntity(), "UTF-8");
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText(receive);
}
} catch (Exception e) {
return;
}
}
}
解説
org.apache.httpの名前空間をインポートします。
import org.apache.http.*;
import org.apache.http.util.*;
import org.apache.http.impl.client.*;
import org.apache.http.client.methods.*;
URLからHttpGetクラスのインスタンスを作成します。
String url = "http://www.ipentec.com/document/";
HttpGet httpGet = new HttpGet(url);
DefaultHttpClientのインスタンスを作成します。
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGetクラスのインスタンスのsetHeaderメソッドを呼び出し、ヘッダを設定します。
httpGet.setHeader("Connection", "Keep-Alive");
DefaultHttpClientクラスのexecuteメソッドを呼び出しHttpでアクセスします。引数にはHttpGetクラスのインスタンスを与えいます。Httpのレスポンスは戻り値のHttpResponseクラスに格納されます。
HttpResponse response = httpClient.execute(httpGet);
HttpResponseのステータスコードを取得します。
int status = response.getStatusLine().getStatusCode();
ステータスコードがOKでない場合は例外を発生させます。ステータスコードがOKの場合はHttpレスポンスのデータをtextViewに表示します。テキストの文字コード変換はEntityUtils.toString()メソッドを用います上記のコードではHTTPで取得したテキストがUTF-8として、テキストを変換します。
if (status != HttpStatus.SC_OK) {
throw new Exception("");
} else {
String receive = EntityUtils.toString(response.getEntity(), "UTF-8");
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText(receive);
}
実行結果
アプリケーションを起動します。下図の画面が表示されます。
Buttonを押します。HTTPで指定のURLにアクセスし取得したHTMLをTextViewに表示します。
補足
上図の実行結果は日本語文字が文字化けしています。これは、shift-JISのコードをUTF-8として変換したためです。文字化けを防ぐためには
String receive = EntityUtils.toString(response.getEntity(), "UTF-8");
を
String receive = EntityUtils.toString(response.getEntity(), "shift_jis");
にします。
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-04
作成日: 2011-10-24