android 网络HttpGet, HttpPost,非常健全的例子

package com.example.http;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.NameValuePair;
import org.apache.http.ProtocolVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
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.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;

public class HttpHelper
{
        public static final String CONTENT_TYPE = "Content-Type";
        /**使用HTTP的POST方法提交的表单*/
        public static final String MIME_FORM_ENCODED = "application/x-www-form-urlencoded";
        /**纯文本*/
        public static final String MIME_TEXT_PLAIN = "text/plain";
        /**HTML文档*/
        public static final String MIME_TEXT_HTML = "text/html";
        /**XHTML文档*/
        public static final String MIME_XHTML = "application/xhtml+xml";
        /**GIF图像*/
        public static final String MIME_IMAGE_GIF = "image/gif";
        /**JPEG图像*/
        public static final String MIME_IMAGE_JPG = "image/jpeg";
        /**PNG图像*/
        public static final String MIME_IMAGE_PNG = "image/png";
        /**MPEG动画*/
        public static final String MIME_IMAGE_VIDEO = "video/mpeg";
        /**任意的二进制数据*/
        public static final String MIME_STREAM = "application/octet-stream";
        /**PDF文档*/
        public static final String MIME_PDF = "application/pdf";
        /**Microsoft Word文件*/
        public static final String MIME_WORD= "application/msword";
        /**HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示*/
        public static final String MIME_NATIVE = "multipart/alternative";
        /**使用HTTP的POST方法提交的表单,但主要用于表单提交时伴随文件上传的场合*/
        public static final String MIME_DATA = "multipart/form-data";
        
        private final ResponseHandler<?> mResponseHandler;
        public static enum TYPE
        {
                GET, POST
        }

        public HttpHelper(ResponseHandler<?> responseHandler)
        {
                mResponseHandler = responseHandler;
        }

        /**
         * 
         * @param uri
         * @param user
         * @param pwd
         * @param aationHeaders
         */
        public void performGet(String uri, String user, String pwd,
                        final Map<String, String> aationHeaders)
        {
                perRequest(null, uri, user, pwd, aationHeaders, null, TYPE.GET);
        }
        
        /**
         * 
         * @param contentType
         * @param uri
         * @param user
         * @param pwd
         * @param aationHeaders
         * @param params
         */
        public void performPost(String contentType, String uri, String user,
                        String pwd, final Map<String, String> aationHeaders,
                        final Map<String, String> params)
        {
                perRequest(contentType, uri, user, pwd, aationHeaders, params, TYPE.POST);
        }

        /**
         * 
         * @param uri
         * @param user
         * @param pwd
         * @param aationHeaders
         * @param params
         */
        public void performPost(String uri, String user, String pwd,
                        final Map<String, String> aationHeaders,
                        final Map<String, String> params)
        {
                perRequest(MIME_FORM_ENCODED, uri, user, pwd, aationHeaders, params, TYPE.POST);
        }

        /**
         * 
         * @param contentType
         * @param uri
         * @param user
         * @param pwd
         * @param aationHeaders
         * @param params
         * @param type
         */
        private void perRequest(String contentType, String uri, String user,
                        String pwd, final Map<String, String> aationHeaders,
                        final Map<String, String> params, TYPE type)
        {
                // 連接對象
                DefaultHttpClient httpClient = new DefaultHttpClient();
                if (null != user && null != pwd && !"".equals(user) && !"".equals(pwd))
                {
                        // 身份驗證
                        httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,
                                        new UsernamePasswordCredentials(user, pwd));
                }

                // 設置頭參數
                final Map<String, String> sendHeaders = new HashMap<String, String>();
                if (aationHeaders != null && !aationHeaders.isEmpty())
                {
                        sendHeaders.putAll(aationHeaders);
                }

                if (TYPE.POST == type)
                {
                        // 設置消息類型
                        sendHeaders.put(CONTENT_TYPE, contentType);
                }

                if (!sendHeaders.isEmpty())
                {
                        httpClient.addRequestInterceptor(new HttpRequestInterceptor()
                        {

                                @Override
                                public void process(HttpRequest request, HttpContext context)
                                                throws HttpException, IOException
                                {
                                        for (String key : sendHeaders.keySet())
                                        {
                                                if (!request.containsHeader(sendHeaders.get(key)))
                                                {
                                                        request.addHeader(key, sendHeaders.get(key));
                                                }
                                        }
                                }
                        });
                }

                if (TYPE.POST == type)
                {
                        HttpPost httpPost = new HttpPost(uri);
                        List<NameValuePair> nvps = null;
                        if (params != null && !params.isEmpty())
                        {
                                nvps = new ArrayList<NameValuePair>();
                                for (String key : params.keySet())
                                {
                                        nvps.add(new BasicNameValuePair(key, params.get(key)));
                                }
                        }

                        if (nvps != null)
                        {
                                // post 參數
                                try
                                {
                                        httpPost.setEntity(new UrlEncodedFormEntity(nvps));
                                } catch (UnsupportedEncodingException e)
                                {
                                        e.printStackTrace();
                                }
                        }

                        execute(httpClient, httpPost);

                } else if (TYPE.GET == type)
                {
                        execute(httpClient, new HttpGet(uri));
                }

        }

        /**
         * 
         * @param client
         * @param method
         */
        private void execute(HttpClient client, HttpRequestBase method) 
        {
                try
                {
                        client.execute(method, mResponseHandler);
                        
                } catch (ClientProtocolException e)
                {
                        BasicHttpResponse errorRequest = new BasicHttpResponse(new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");
                        errorRequest.setReasonPhrase(e.toString());
                        
                        try
                        {
                                mResponseHandler.handleResponse(errorRequest);
                                
                        } catch (ClientProtocolException e1)
                        {
                                e1.printStackTrace();
                        } catch (IOException e1)
                        {
                                e1.printStackTrace();
                        }
                        
                } catch (IOException e)
                {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }


}


public class HttpResponseHandler<T> implements ResponseHandler<T>
{

        public HttpResponseHandler(int s)
        {
                
        }
        
        @SuppressWarnings("unchecked")
        @Override
        public T handleResponse(HttpResponse response)
                        throws ClientProtocolException, IOException
        {
                T result = null;

                if (response.getStatusLine().getStatusCode() == 200)
                {
                        HttpEntity entity = response.getEntity();
                        result = (T) EntityUtils.toString(entity, HTTP.UTF_8);
                        Log.e("SFH",result.toString());
                }
                return result;
        }

}



public class MainActivity extends Activity
{

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                
                
                new Thread(new Runnable()
                {
                        
                        @Override
                        public void run()
                        {
                                new HttpHelper(new HttpResponseHandler<String>(0)).performGet("網絡地址", null, null, null);
                        }
                }).start();
        
        }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值