AndroidHttpClientによるHTTP POST

GCM (Google Cloud Messaging) のRegistration ID登録処理におけるAndroidアプリ側の処理として、サーバアプリに対してHTTP POSTで情報を送信する処理が必要になります。

AndroidでのHTTP POSTは使ったことがなかったので簡単なサンプルを使ってみました。今回はHttpUrlConnectionよりも使い方が簡単そうなAndroidHttpClientを使用しています。

基本的なロジックはAndroidHttpClientによるHTTP GETとほぼ同様ですが、HTTPリクエストにNamedValuePairのリストをセットする点が異なります。

以下のコード例でははしょっていますが、AndroidHttpClientはUIスレッドでは使えないので、適宜AsyncTask等と組み合わせる必要があります。

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.message.BasicNameValuePair;
import android.net.http.AndroidHttpClient;

class MainActivity exteds Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
    ....
        // HTTPリクエストの構築
        HttpPost request = new HttpPost("http://server-app.example.com:3000/devices/register");
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("device_id", "DEVICEID_TEST00"));
        params.add(new BasicNameValuePair("registration_id", "REGID_TEST00"));
        try {
            request.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        // HTTPリクエスト発行
        AndroidHttpClient httpClient = AndroidHttpClient.newInstance("Demo AndroidHttpClient");
        HttpResponse response = null;
        try {
            response = httpClient.execute(request);
        } catch (IOException e) {
            e.printStackTrace();
        }
    ....
}