Android中HttpURLConnection与HttpClient的使用与封装

yizhihongxing

Android中HttpURLConnection与HttpClient的使用与封装

  1. HttpURLConnection的使用
    HttpURLConnection是Android中自带的一个HTTP客户端库,可以轻松的使用HTTP请求。使用HttpURLConnection发送请求的步骤如下:

(1)创建URL对象
URL url = new URL("http://www.example.com");
(2)创建HttpURLConnection对象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
(3)设置请求方式
conn.setRequestMethod("GET");
(4)设置连接超时时间
conn.setConnectTimeout(5000);
(5)设置读取超时时间
conn.setReadTimeout(5000);
(6)连接服务器
conn.connect();
(7)获取响应码
int responseCode = conn.getResponseCode();
(8)获取输入流,读取服务器返回的数据
InputStream inputStream = conn.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine()) != null) {
Log.d("TAG", line);
}
bufferedReader.close();
inputStream.close();

(9)断开连接
conn.disconnect();

  1. HttpClient的使用
    HttpClient是Apache提供的一个HTTP客户端库,可以轻松地使用HTTP请求。使用HttpClient发送请求的步骤如下:

(1)创建HttpClient对象
HttpClient httpClient = new DefaultHttpClient();
(2)根据URL创建HttpGet或HttpPost对象
HttpGet httpGet = new HttpGet("http://www.example.com");
HttpPost httpPost = new HttpPost("http://www.example.com");

(3)设置参数(如果有)
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("username", "admin"));
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));

(4)执行请求,获取HttpResponse对象
HttpResponse httpResponse = httpClient.execute(httpGet);
(5)获取响应码
int responseCode = httpResponse.getStatusLine().getStatusCode();
(6)获取数据流,读取服务器返回的数据
InputStream inputStream = httpResponse.getEntity().getContent();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine()) != null) {
Log.d("TAG", line);
}
bufferedReader.close();
inputStream.close();

(7)释放资源
httpClient.getConnectionManager().shutdown();

  1. 封装Http请求
    封装Http请求可以减少代码重复,提高代码复用性。可以将HttpURLConnection和HttpClient封装成一个类,提供公共方法供外部调用。

(1)封装HttpURLConnection
```
public class HttpHelper {

        public static String requestGet(String URLAddress) throws IOException {
            StringBuilder stringBuilder = new StringBuilder();

            URL url = new URL(URLAddress);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);

            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream inputStream = conn.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
                bufferedReader.close();
                inputStream.close();
            }

            conn.disconnect();

            return stringBuilder.toString();
        }
    }
    ```

(2)封装HttpClient
```
public class HttpHelper {

        public static String requestGet(String urlAddress) throws IOException {
            StringBuilder stringBuilder = new StringBuilder();

            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(urlAddress);

            HttpResponse httpResponse = httpClient.execute(httpGet);

            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                InputStream inputStream = httpResponse.getEntity().getContent();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
                bufferedReader.close();
                inputStream.close();
            }

            httpClient.getConnectionManager().shutdown();

            return stringBuilder.toString();
        }
    }
    ```
  1. 示例说明
    (1)使用HttpURLConnection发送GET请求
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    String result = HttpHelper.requestGet("http://www.example.com");
    Log.d("TAG", result);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start();

    (2)使用HttpClient发送GET请求
    new Thread(new Runnable() {
    @Override
    public void run() {
    try {
    String result = HttpHelper.requestGet("http://www.example.com");
    Log.d("TAG", result);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start();

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中HttpURLConnection与HttpClient的使用与封装 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 如何使用jQuery Mobile创建一个填充式弹出窗口

    如何使用jQuery Mobile创建一个填充式弹出窗口?本文将为大家提供一份详细攻略。 1. 创建一个填充式弹出窗口 <!– 弹出窗口内容代码 –> <div id="popup1" data-role="popup" data-theme="a" data-overlay-…

    jquery 2023年5月12日
    00
  • JQuery ajax 返回json时出现中文乱码该如何解决

    JQuery在使用ajax异步请求数据时,返回的数据通常是以JSON格式返回。如果返回的数据中存在中文字符,那么在部分浏览器下可能会出现中文乱码的问题。本文将为大家介绍在JQuery异步请求返回JSON数据时出现中文乱码的解决方法。 问题现象 Jquery ajax请求返回JSON时,中文字符出现乱码或其他非预期的字符。 解决方法 方法一:在后台进行字符编码…

    jquery 2023年5月18日
    00
  • jQuery UI Datepicker beforeShowDay选项

    下面是关于“jQuery UI Datepicker beforeShowDay选项”的详细讲解。 什么是 beforeShowDay 选项? beforeShowDay是jQuery UI Datepicker控件中的一个选项,它允许您指定一个函数来自定义日期的可用性和外观。在弹出日期选择器之前,beforeShowDay函数将会对每个日期应用,并决定是否…

    jquery 2023年5月12日
    00
  • jQuery对象与DOM对象转换方法详解

    下面我将详细讲解“jQuery对象与DOM对象转换方法详解”的完整攻略。 什么是jQuery对象? 在开发过程中,我们通常需要对网页中的元素进行操作,比如获取元素的属性、修改元素的样式等等。jQuery是一种非常流行的JavaScript库,提供了一种方便快捷的方式来访问和操作HTML文档中的元素、属性和事件等。 在jQuery中,我们通过选择器来选中元素,…

    jquery 2023年5月28日
    00
  • jQWidgets jqxQRcode renderAs属性

    以下是关于 jQWidgets jqxQRcode 组件中 renderAs 属性的详细攻略。 jQWidgets jqxQRcode renderAs 属性 jQWidgets jqxQRcode 组件的 renderAs 属性用于二维码的渲染方式。 语法 // 设置二维码的渲染方式 $(‘#qrcode’).jqxQRCode({ renderAs: ‘…

    jquery 2023年5月12日
    00
  • JavaScript 复制对象与Object.assign方法无法实现深复制

    JavaScript 复制对象是一个比较常见的操作,常常用于在不改变原对象的情况下,创建一个新的对象并将原对象的属性值完全复制到新对象中。但是,在使用 Object.assign() 方法实现复制对象时,我们会发现这个方法无法实现深复制。这个问题在 JS 开发中非常常见,接下来我们将通过两个示例来详细解释为什么 Object.assign 方法无法实现深复制…

    jquery 2023年5月28日
    00
  • 通过jquery的ajax请求本地的json文件方法

    下面是“通过jquery的ajax请求本地的json文件方法”的攻略以及两个示例。 准备工作 首先需要准备好本地的json文件,并且使用正确的json格式来编写该文件。同时需要引入jQuery库。 方法说明 使用jQuery的ajax()方法,可以向服务器请求数据,ajax()方法的语法如下: $.ajax({ url: "json文件的地址&qu…

    jquery 2023年5月27日
    00
  • jQWidgets的jqxSortable tolerance属性

    我来为您详细讲解一下 jQWidgets 的 jqxSortable tolerance 属性。 什么是 jqxSortable? jqxSortable 是 jQWidgets 中的一个插件,它允许用户通过拖拽操作对 HTML 元素进行排序和移动等操作,非常适用于拖拽排序等操作。而 tolerance 则是 jqxSortable 中一个非常重要的属性,下…

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部