码迷,mamicode.com
首页 > 移动开发 > 详细

Android使用http协议的GET和POST方法!!!

时间:2015-07-27 13:21:23      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:http协议   android   get   post   

前几天刚入职,研究了一下android里面的http协议的get和post请求:

Android里面有HttpClient可以用来访问网页的接口,下面来介绍HttpClient接口的使用,

1.GET:

/**
     * GET请求
     * @param path 网页路径
     * @param params 参数
     * @param values 参数的值
     * @return JSON
     */
    public static String doGet(String path,String[] params,String[] values){
        try {
            HttpClient httpClient = new DefaultHttpClient();//创建httpClient对象
            String url = URLParamUtil.praiseGetParams(path, params, values);//组合网页参数
            HttpGet httpGet = new HttpGet(url);//创建GET对象
            HttpResponse httpResponse = httpClient.execute(httpGet);//开始访问,用HttpResponse来收返回的数据
            //如果连接成功,读取数据
            if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                return readData(httpResponse.getEntity().getContent());//通过HttpResponse来获得对应的输出流
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 解析URL
     * @param path 路径
     * @param params 参数
     * @param values 值
     * @return URL
     */
    public static String praiseGetParams(String path,String[] params,String[] values){
        String url = "";
        //如果params和values为空就返回path
        if(params==null||values==null){
            url = path;
        }
        //如果参数和值的大小不同,抛出异常
        else if(params.length != values.length){
            try {
                throw new Exception("参数异常");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //正常解析情况
        else{
            url = path + "?";
            for(int i=0;i<params.length;i++){
                url += (params[i] + "=" + values[i] + "&");
            }
            //截取最后的一个字符"&"
            url = url.substring(0, url.length()-1);
        }
        return url;
    }

    /**
     * 通过字节输出流读取数据
     * @param is
     * @return JSON
     */
    public static String readData(InputStream is){
        BufferedReader br = new BufferedReader(new InputStreamReader(is));//将字节输出流转换为字符输出流
        StringBuffer sb = new StringBuffer();
        String line = "";
        try {
            line = br.readLine();
            //循环读取数据
            while(line != null){
                sb.append(line + "\n");
                line = br.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

2.POST

/**
     * POST请求
     * @param path 网页路径
     * @param params 参数
     * @param values 参数的值
     * @return JSON
     */
    public static String doPost(String path,String[] params,String[] values){
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(path); //创建POST对象
            //创建参数
            List<NameValuePair> pairs = URLParamUtil.praisePostParams(params, values);
            HttpEntity entity = new UrlEncodedFormEntity(pairs,"UTF-8");
            httpPost.setEntity(entity);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            // 请求成功开始读取数据
            if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                return readData(httpResponse.getEntity().getContent());
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 解析POST参数
     * @return pairs
     */
    public static List<NameValuePair> praisePostParams(String[] params,String[] values){
        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        NameValuePair pair = null;
        //遍历数组创建参数
        for(int i=0;i<params.length;i++){
            pair = new BasicNameValuePair(params[i], values[i]);
            pairs.add(pair);
        }
        return pairs;
    }


注意:这些操作必须在线程中运行


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android使用http协议的GET和POST方法!!!

标签:http协议   android   get   post   

原文地址:http://blog.csdn.net/qq_22605739/article/details/47081661

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!