2011年12月6日

【Android】HTTP通信をする(3)

今回はまじめに、クラス的な何かを作ろうと思います。

ズバリ!HTTPのGETもPOSTも何でもやってくれるようなクラス。

ではでは、早速作成に入りたいと思います。


Http.java

package com.shonanshachu.http;

public class Http {
  private String url;
  private ArrayList<NameValuePair> params;

  public Http(){
    params = new ArrayList<NameValuePair>();
  }

  public void setUrl(String url){
    this.url = url;
  }

  public void setParam(String key, String value){
    params.add(new BasicNameValuePair(key, value));
  }

  public String get() throws UnsupportedEncodingException, ClientProtocolException, IOException{
    String paramString = "";
    if(params.size() > 0 ){
      if(this.url.contains("?"){
        paramString += "&";
      } else {
        parmaString += "?";
      }
      paramString += params.get(0).getName() + "=" + params.get(0).getValue();
      for(int i = 1; i < params.size(); i++){
        paramString += "&" + params.get(i).getName() + "=" + params.get(i).getValue();
      }
    }
    HttpClient client = new DefaultHttpClient();
    HttpGet get = new HttpGet(url);
    HttpResponse response = client.execute(get);
    ByteArrayOutputStream outstream = new ByteArrayOutputStream();
    response.getEntity().writeTo(outstream);
    return outstream.toString();
  }

  public String post() throws UnsupportedEncodingException, ClientProtocolException, IOException{
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    post.setEntity(new UrlEncodedFormEntity(params));
    HttpResponse response = client.execute(post);
    ByteArrayOutputStream outstream = new ByteArrayOutputStream();
    response.getEntity().writeTo(outstream);
    return outstream.toString();
  }
}

include等は省いていますが、
こんな感じで、
GETでもPOSTでもHTTP通信が出来るようになりました。
私はさらに拡張して、
UserAgentだとか、Content-Type何かも拡張できるようにしておりますが、
ブログにするにはクラスのサイズが大きいので、簡単にまとめました。

今回はここまでです。

次回もよろしくお願いします。