WebAPIをバンバン使うアプリを作っていたわりに、微妙にJavaでのHTTP通信の方法をよくわかってなかったのですが、ようやくちょっとわかったのでメモっときます。今まではライブラリでやっていました。
API Level 8からAndroidHttpClientというのがあるらしいんですが、今回はあえてDefaultHttpClientで。
以下、GET
// 例外処理は省いています // パラメータを生成 ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("subject", "件名")); params.add(new BasicNameValuePair("body", "本文です。こんにちは!")); // パラメータをクエリに変換 String query = URLEncodeUtils.format(params, "UTF-8"); HttpGet httpGet = new HttpGet("http://www.example.com/?" + query); DefaultHttpClient client = new DefaultHttpClient(); HttpResponse httpResponse = client.execute(httpGet); // ステータスコードを取得 int statusCode = httpResponse.getStatusLine().getStatusCode(); // レスポンスを取得 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity); // リソースを解放 entity.consumeContent(); // クライアントを終了させる client.getConnectionManager().shutdown(); // 後はステータスコードやレスポンスを煮るなり焼くなり
以下、POST
// 例外処理は省いています // パラメータを生成 ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("subject", "件名")); params.add(new BasicNameValuePair("body", "本文です。こんにちは!")); HttpPost httpPost = new HttpPost("http://www.example.com/"); // パラメータを設定 httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); DefaultHttpClient client = new DefaultHttpClient(); HttpResponse httpResponse = client.execute(httpPost); // ステータスコードを取得 int statusCode = httpResponse.getStatusLine().getStatusCode(); // レスポンスを取得 HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity); // リソースを解放 entity.consumeContent(); // クライアントを終了させる client.getConnectionManager().shutdown(); // 後はステータスコードやレスポンスを煮るなり焼くなり
という感じっぽいです。
割と色々とやっているのに、こういう初歩的なことで詰まったりするので、基本をもっとちゃんとやらないといかんなぁと思いました。やっても忘れるので、俺俺ライブラリ作るか、こうやってブログにまとめておくか…。
ちなみに参考にした本は、横山さんの本です。
【送料無料】Google Android WebAPIプログラミング入門 |
マッシュアップアプリを作りたい人にとっては、すごく参考になると思います!