Android中HttpURLConnection与HttpClient的使用与封装

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同步提交示例代码

    好的。首先,我需要说明的是jQuery同步提交是指在浏览器与服务器之间的请求和响应过程中,浏览器需要等待服务器端的响应才能执行下一步动作。这与异步提交不同,异步提交可以在等待服务器响应的同时继续执行其他操作。 以下是一个完整的jQuery同步提交示例代码攻略: 步骤一:准备HTML结构 首先,需要在HTML文档中准备一个表单元素。表单中要包含要提交的数据,以…

    jquery 2023年5月27日
    00
  • jQWidgets jqxKnob destroy()方法

    jQWidgets jqxKnob destroy()方法攻略 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建现代化 Web 应用程序。 jqxKnob钮组件,用于可视化调整数值。攻略将详细介绍 jqxKnob 的 destroy() 方法,该方法用于销毁 jqxKnob 组件。 destroy()方…

    jquery 2023年5月10日
    00
  • 浅谈测试驱动开发TDD之争

    浅谈测试驱动开发TDD之争 测试驱动开发(TDD)是一种开发方法,其核心思想是在编写代码之前先编写测试用例,然后编写的代码需要通过测试用例的检验。以下是TDD的完整攻略: 步骤1:编写测试用例 首先,需要明确待开发的功能或需求,并将其分解为小任务。分解后,为每个任务编写一个测试用例,测试用例应该覆盖尽可能多的场景和情况,以确保代码的完整性和正确性。 示例1:…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDropDownList unselectIndex()方法

    jQWidgets jqxDropDownList unselectIndex()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDrop是Widgets组用于实现下拉列表。本文将详细介绍如何使用jqxDropDownList的unselectIndex()方法提供两个示例。 jqxDropDownList …

    jquery 2023年5月10日
    00
  • jQuery event.type属性

    jQuery event.type属性返回当前事件的类型。该属性通常用于确定事件的类型,以便在事件处理程序中采取适当的行动。 以下是jQuery event.type属性的详细攻略: 语法 event.type 参数 无 示例1:确定事件类型 以下示例演示了如何使用jQuery event.type属性确定事件类型: <!DOCTYPE html&gt…

    jquery 2023年5月9日
    00
  • jQWidgets jqxEditor rtl属性

    jQWidgets jqxEditor rtl属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具包括表格、下拉等。jqxEditor是jQWidgets的件之一,用于创建富文本编辑器。rtl属性是jqxEditor的一个属性,用于设置富文本编辑器的文本方向。 rtl属性的基本语法 rtl属性用于设置富文本编辑的文本方向,其…

    jquery 2023年5月9日
    00
  • jQuery使用$.each遍历json数组的简单实现方法

    下面是详细讲解“jQuery使用$.each遍历json数组的简单实现方法”的完整攻略: 1. 什么是jQuery? jQuery 是一个广泛使用的 JavaScript 库,其主要功能是精简 Javascript 编程开发。它极大地简化了 HTML 文档操作、事件处理、动画设计和 Ajax 交互,这使得它成为了一个拥有无数用户(包括许多大公司的开发人员)的…

    jquery 2023年5月28日
    00
  • 如何使用jQuery创建任何对象的克隆

    当使用jQuery创建任何对象的克隆时,我们可以使用以下步骤: 获取要克隆的元素,例如使用$(“#myDiv”)选择器获取id为myDiv的元素。 使用.clone()函数创建元素的克隆,例如$(“#myDiv”).clone()。 使用.appendTo()函数将克隆添加到文档中的某个元素中,例如$(“#myDiv”).clone().appendTo(“…

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