Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(): Failed opening '/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php' for inclusion (include_path='.:/usr/local/php/5.4/lib/php') in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74
Android POST送信を実装の方法 – Androidアプリつくったった

Android POST送信を実装の方法

httpPostforAndroid

◇Android POST送信を実装してみよう

今回はAndroidアプリにPOST送信を実装する方法を書いていきたいと思います。
 
アプリからデータを送信する場合どうしてもプライベートな情報が多くなりがちなので
POST送信が多くなります。
そこでできるだけ汎用性の高いソースを作っておいて使いまわそうということで
作ったのが今回のソースです。
記事の最後にまとめて紹介してます。
 
なお、Android3.0からメインスレッド(UIスレッド)からの通信が禁止されていますので
AsyncTaskによる非同期処理化やWidgetでの動作を前提としています。
 

POST送信の実装手順

3ステップで実装完了します。

Step1
まず、クライアント設定します。

	DefaultHttpClient client = new DefaultHttpClient();
	HttpPost method = new HttpPost(url);

 
Step2
次にリクエストパラメータを設定します。

	List<NameValuePair> params = new ArrayList<NameValuePair>();
	params.add(new BasicNameValuePair("params_id", getId()));
	params.add(new BasicNameValuePair("params_data", getData()));

 
Step3
最後にエンソースコード(UTF-8)を設定して送信します。
送信形はtry~catchで囲みましょう。
※実用性を意識してステータス、エラーを受け取って
返すようにしています。エラーも踏まえてString型が良いでしょう。

	try {
		method.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
		HttpResponse response = client.execute(method);
		int status = response.getStatusLine().getStatusCode();
		return "Status:" + status;
	} catch (Exception e) {
		return "Error:" + e.getMessage();
	}

ここまででしっかりPOST送信ができます。

まとめるとこんな感じになります
汎用性の高いコードを貼っておきます。
String型でURLをそのまま渡すだけで動きます。

パラメータをセットせずにサーバチェック用に使うのもありです。

◎アプリ側

	public String doPost(String url) {

		DefaultHttpClient client = new DefaultHttpClient();
		HttpPost method = new HttpPost(url);

		// リクエストパラメータの設定
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		params.add(new BasicNameValuePair("params_id", getId()));
		params.add(new BasicNameValuePair("params_data", getData()));
		try {
			method.setEntity(new UrlEncodedFormEntity(params, "utf-8"));
			HttpResponse response = client.execute(method);
			int status = response.getStatusLine().getStatusCode();
			return "Status:" + status;
		} catch (Exception e) {
			return "Error:" + e.getMessage();
		}
	}

◎サーバサイド
とりあえず受け取った値を表示させるならこんな感じに書けばよいでしょう。

<?php
  echo "レスポンスのテスト。\n"
    ."一つ目 " 
    . $_POST["params_id"] . "\n"
    ."二つ目 " 
    . $_POST["params_data"];
?>

最後にレスポンスコードに付いてまとめておきました。
おおざっぱにまとめると(おおざっぱすぎるかも)
200番台は届いた。
300番台はサーバに付いてのお知らせ(問題)
400番台はクライアントの問題
500番台はサーバサイドに問題あり
といった感じです。

◎レスポンスコードの覚書き
本当はたくさんあるのですが、実際使うコードにしぼりました。

◇200番台
200 OK      リクエストは正常に処理されました。
202 Accepted リクエストは受け取られましたが、すぐに処理の対象とはなりません。

◇300番台
302 Moved Temporarily リクエストされたURIは一時的に移転しています。
              Locationヘッダ中に移転先が記されています。
305 Use Proxy Location ヘッダで指定されるProxy経由でアクセスしなくてはなりません。

◇400番台
400 Bad Request クライアントのリクエストに文法エラー(syntax error)があります。
403 Forbidden  リクエストは拒否されました。
404 Not Found  指定されたリソースは存在しません。
408 Request Time-Out 接続がタイムアウトされました。

◇500番台
500 Internal Server Error サーバ内部エラーです。
                ※wordpressではfunction.phpで何かやらかすとお目にかかります
503 Service Unavailable  一時的にサービスは利用できません。
505 HTTP Version Not Supported 要求されたHTTPのバージョンをサーバは対応していません。

だいたいこんな感じです。

以上です。

ご参考になれば幸いです。


About the Author

dhmo
Author:DHMO(ディベロッパー名) 仕事では自社サービス・メディアの開発を行ってます。 趣味でAndroidアプリ製作を行っています。 カラオケではランキングバトルにはまっております。 Mail: dihydromooxide7@gmail.com 

Leave a comment

Your email address will not be published.


*