最近在看Android的开发,其中用到了HttpClient来提交或者获取server端的数据,但是Android自带的API还是有点不好用,所以自己根据自己的需要就做了一个包装,如下:
HttpConnectionUtil类是一个工具类,其中提供了同步和异步方法,并且目前是支持http的Get和Post方法
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.apache.http.HttpResponse;
- import org.apache.http.HttpStatus;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.client.methods.HttpUriRequest;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- import android.os.Handler;
- import android.util.Log;
- public class HttpConnectionUtil {
- public static enum HttpMethod {GET, POST}
-
- public void asyncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {
- asyncConnect(url, null, method, callback);
- }
-
- public void syncConnect(final String url, final HttpMethod method, final HttpConnectionCallback callback) {
- syncConnect(url, null, method, callback);
- }
-
- public void asyncConnect(final String url, final Map<String, String> params,
- final HttpMethod method, final HttpConnectionCallback callback) {
- Handler handler = new Handler();
- Runnable runnable = new Runnable() {
- public void run() {
- syncConnect(url, params, method, callback);
- }
- };
- handler.post(runnable);
- }
-
- public void syncConnect(final String url, final Map<String, String> params,
- final HttpMethod method, final HttpConnectionCallback callback) {
- String json = null;
- BufferedReader reader = null;
-
- try {
- HttpClient client = new DefaultHttpClient();
- HttpUriRequest request = getRequest(url, params, method);
- HttpResponse response = client.execute(request);
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
- reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
- StringBuilder sb = new StringBuilder();
- for (String s = reader.readLine(); s != null; s = reader.readLine()) {
- sb.append(s);
- }
- json = sb.toString();
- }
- } catch (ClientProtocolException e) {
- Log.e("HttpConnectionUtil", e.getMessage(), e);
- } catch (IOException e) {
- Log.e("HttpConnectionUtil", e.getMessage(), e);
- } finally {
- try {
- if (reader != null) {
- reader.close();
- }
- } catch (IOException e) {
-
- }
- }
- callback.execute(json);
- }
-
- private HttpUriRequest getRequest(String url, Map<String, String> params, HttpMethod method) {
- if (method.equals(HttpMethod.POST)) {
- List<NameValuePair> listParams = new ArrayList<NameValuePair>();
- if (params != null) {
- for (String name : params.keySet()) {
- listParams.add(new BasicNameValuePair(name, params.get(name)));
- }
- }
- try {
- UrlEncodedFormEntity entity = new UrlEncodedFormEntity(listParams);
- HttpPost request = new HttpPost(url);
- request.setEntity(entity);
- return request;
- } catch (UnsupportedEncodingException e) {
-
- throw new java.lang.RuntimeException(e.getMessage(), e);
- }
- } else {
- if (url.indexOf("?") < 0) {
- url += "?";
- }
- if (params != null) {
- for (String name : params.keySet()) {
- url += "&" + name + "=" + URLEncoder.encode(params.get(name));
- }
- }
- HttpGet request = new HttpGet(url);
- return request;
- }
- }
- }
HttpConnectionCallback类是一个回调类,用来处理请求完毕后的逻辑。
- public interface HttpConnectionCallback {
-
-
-
-
-
- void execute(String response);
- }