HttpClient之Http请求步骤

        apache为客户端http请求提供了一套有用的API,在安卓端编写http请求操作的时候可以使用该API,下面总结一下请求步骤.

壹.创建List<NameValuePair>对象,为表单提供用list存放的参数:

List<NameValuePair> list=getRequestParams(requestParams);

//将请求的Map转换成List

 private static List<NameValuePair> getRequestParams(Map<String,String> requestParams){

        List<NameValuePair> list=null;

        list=new ArrayList<NameValuePair>();

        //生成迭代器

        Iterator iterator=requestParams.entrySet().iterator();

        while (iterator.hasNext()){

            //Map.Entry接口,将键值对分隔

            Map.Entry<String,String>entry =(Map.Entry<String,String>)iterator.next();

            list.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));

        }

        return list;

    }

贰.用singleton模式创建httpclient对象:

 HttpClient mHttpClient =SingleTonHttpClients.getInstanceHttpClients();


public class SingleTonHttpClients {

    private SingleTonHttpClients(){}

    private static final HttpClient mHttpClient=new DefaultHttpClient();

    public static HttpClient getInstanceHttpClients(){

        return mHttpClient;

    }

}

叁.创建HttpPost对象,以post形式提交表单:

 HttpPost post=buildHttpPost(list,requestPath);


private static HttpPost buildHttpPost(List<NameValuePair> list,String requestPath){

        HttpPost post=null;

        try{

            UrlEncodedFormEntity postEntity=new UrlEncodedFormEntity(list,"utf-8");

            post=new HttpPost(requestPath);

            post.setEntity(postEntity);

        }

        catch (UnsupportedEncodingException e){

            e.printStackTrace();

        }

        return post;

    }


肆.执行post方法,请求服务器,返回数据流(创建HttpResponse对象,用以接收服务器返回;HttpEntity对象,用以得到服务器返回内容并以流的形式返回)

 InputStream serverInputStream =getSeverResponse(mHttpClient,post)


 private static InputStream getSeverResponse(HttpClient mHttpClient,HttpPost post){

        try {

            HttpResponse mResponse=mHttpClient.execute(post);

            HttpEntity mEntity=mResponse.getEntity();

            return mEntity.getContent();

        }

        catch (SocketTimeoutException e){

            e.printStackTrace();

        }

        catch (IOException e){

            e.printStackTrace();

        }

        return null;

    }

伍.将输入流读入,并处理成字符串

 private static InputStream getSeverResponse(HttpClient mHttpClient,HttpPost post)


 private static InputStream getSeverResponse(HttpClient mHttpClient,HttpPost post){

        try {

            HttpResponse mResponse=mHttpClient.execute(post);

            HttpEntity mEntity=mResponse.getEntity();

            return mEntity.getContent();

        }

        catch (SocketTimeoutException e){

            e.printStackTrace();

        }

        catch (IOException e){

            e.printStackTrace();

        }

        return null;

    }


完整代码如下:

public class HttpUtils {

    /**

     *

     * @param requestPath 服务器请求路径

     * @param requestParams 请求参数

     * @param requestEncode 请求表单的编码格式

     * @param responseEncode 请求返回体的编码格式

     * @return

     */

    public static String getResponseString(String requestPath,

        Map<String,String>requestParams,String requestEncode,String responseEncode){

        //将请求参数转换成list

        List<NameValuePair> list=getRequestParams(requestParams);

        if(list!=null) {

            //创建HttpPost对象,以post形式提交表单

            HttpPost post=buildHttpPost(list,requestPath);

            //创建httpclient对象

            HttpClient mHttpClient =SingleTonHttpClients.getInstanceHttpClients();

            if(mHttpClient!=null){

                //将服务器返回结果以流的形式读取

                InputStream serverInputStream =getSeverResponse(mHttpClient,post);

                if (serverInputStream!=null){

                    //将服务器返回结果转换成字符串

                    return (getStreamToString(serverInputStream,responseEncode));

                }

                else {

                    return "internetexception";

                }

            }

            else {

                return "singletonexception";

            }


        }

        else return "paramsexception";

    }


    /**

     * 将请求的Map转换成List

     * @param requestParams

     * @return

     */

    private static List<NameValuePair> getRequestParams(Map<String,String> requestParams){

        List<NameValuePair> list=null;

        list=new ArrayList<NameValuePair>();

        //生成迭代器

        Iterator iterator=requestParams.entrySet().iterator();

        while (iterator.hasNext()){

            //Map.Entry接口,将键值对分隔

            Map.Entry<String,String>entry =(Map.Entry<String,String>)iterator.next();

            list.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));

        }

        return list;

    }


    /**

     * 将list放入请求表单中

     * 实例化HttpPost对象

     * @param list

     * @param requestPath

     * @return

     */

    private static HttpPost buildHttpPost(List<NameValuePair> list,String requestPath){

        HttpPost post=null;

        try{

            UrlEncodedFormEntity postEntity=new UrlEncodedFormEntity(list,"utf-8");

            post=new HttpPost(requestPath);

            post.setEntity(postEntity);

        }

        catch (UnsupportedEncodingException e){

            e.printStackTrace();

        }

        return post;

    }


    /**

     * 执行post方法,请求服务器,返回数据流

     * @param mHttpClient

     * @param post

     * @return

     */

    private static InputStream getSeverResponse(HttpClient mHttpClient,HttpPost post){

        try {

            HttpResponse mResponse=mHttpClient.execute(post);

            HttpEntity mEntity=mResponse.getEntity();

            return mEntity.getContent();

        }

        catch (SocketTimeoutException e){

            e.printStackTrace();

        }

        catch (IOException e){

            e.printStackTrace();

        }

        return null;

    }


    /**

     * 将网络中的数据流转换成字符串

     * @param inputStream

     * @param encode

     * @return

     */

    private static String getStreamToString(InputStream inputStream,String encode){

        StringBuffer stringBuffer=new StringBuffer();

        try {

            BufferedReader mBufferedReader=new BufferedReader(new InputStreamReader(inputStream,encode));

            String tmp=new String();

            while ((tmp=mBufferedReader.readLine())!=null){

                stringBuffer.append(tmp);

            }

            mBufferedReader.close();

            return stringBuffer.toString();

        }

        catch (UnsupportedEncodingException e){

            e.printStackTrace();

            return "switchexception";

        }

        catch (IOException e){

            e.printStackTrace();

            return "switchexception";

        }

    }

}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。