Ref:http://blog.csdn.net/zuolongsnail/article/details/6373051

Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文。

java.net包中的HttpURLConnection类

Get方式:

// Get方式请求

public static void requestByGet() throws Exception {

String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";

// 新建一个URL对象

URL url = new URL(path);

// 打开一个HttpURLConnection连接

HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

// 设置连接超时时间

urlConn.setConnectTimeout(5 * 1000);

// 开始连接

urlConn.connect();

// 判断请求是否成功

if (urlConn.getResponseCode() == HTTP_200) {

// 获取返回的数据

byte[] data = readStream(urlConn.getInputStream());

Log.i(TAG_GET, "Get方式请求成功,返回数据如下:");

Log.i(TAG_GET, new String(data, "UTF-8"));

} else {

Log.i(TAG_GET, "Get方式请求失败");

}

// 关闭连接

urlConn.disconnect();

}

Post方式:

// Post方式请求

public static void requestByPost() throws Throwable {

String path = "https://reg.163.com/logins.jsp";

// 请求的参数转换为byte数组

String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")

+ "&pwd=" + URLEncoder.encode("android", "UTF-8");

byte[] postData = params.getBytes();

// 新建一个URL对象

URL url = new URL(path);

// 打开一个HttpURLConnection连接

HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

// 设置连接超时时间

urlConn.setConnectTimeout(5 * 1000);

// Post请求必须设置允许输出

urlConn.setDoOutput(true);

// Post请求不能使用缓存

urlConn.setUseCaches(false);

// 设置为Post请求

urlConn.setRequestMethod("POST");

urlConn.setInstanceFollowRedirects(true);

// 配置请求Content-Type

urlConn.setRequestProperty("Content-Type",

"application/x-www-form-urlencode");

// 开始连接

urlConn.connect();

// 发送请求参数

DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());

dos.write(postData);

dos.flush();

dos.close();

// 判断请求是否成功

if (urlConn.getResponseCode() == HTTP_200) {

// 获取返回的数据

byte[] data = readStream(urlConn.getInputStream());

Log.i(TAG_POST, "Post请求方式成功,返回数据如下:");

Log.i(TAG_POST, new String(data, "UTF-8"));

} else {

Log.i(TAG_POST, "Post方式请求失败");

}

}

org.apache.http包中的HttpGet和HttpPost类

Get方式:

// HttpGet方式请求

public static void requestByHttpGet() throws Exception {

String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";

// 新建HttpGet对象

HttpGet httpGet = new HttpGet(path);

// 获取HttpClient对象

HttpClient httpClient = new DefaultHttpClient();

// 获取HttpResponse实例

HttpResponse httpResp = httpClient.execute(httpGet);

// 判断是够请求成功

if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {

// 获取返回的数据

String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");

Log.i(TAG_HTTPGET, "HttpGet方式请求成功,返回数据如下:");

Log.i(TAG_HTTPGET, result);

} else {

Log.i(TAG_HTTPGET, "HttpGet方式请求失败");

}

}

Post方式:

// HttpPost方式请求

public static void requestByHttpPost() throws Exception {

String path = "https://reg.163.com/logins.jsp";

// 新建HttpPost对象

HttpPost httpPost = new HttpPost(path);

// Post参数

List<NameValuePair> params = new ArrayList<NameValuePair>();

params.add(new BasicNameValuePair("id", "helloworld"));

params.add(new BasicNameValuePair("pwd", "android"));

// 设置字符集

HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);

// 设置参数实体

httpPost.setEntity(entity);

// 获取HttpClient对象

HttpClient httpClient = new DefaultHttpClient();

// 获取HttpResponse实例

HttpResponse httpResp = httpClient.execute(httpPost);

// 判断是够请求成功

if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {

// 获取返回的数据

String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");

Log.i(TAG_HTTPGET, "HttpPost方式请求成功,返回数据如下:");

Log.i(TAG_HTTPGET, result);

} else {

Log.i(TAG_HTTPGET, "HttpPost方式请求失败");

}

}

以上是一些部分代码,测试的时候在测试类中运行对应的测试方法即可。

Android进阶(一)几种网络请求方式详解的更多相关文章

  1. VirtualBox的四种网络连接方式详解

    VirtualBox中有4中网络连接方式: 1. NAT 2. Bridged Adapter 3. Internal 4. Host-only Adapter VMWare中有三种,其实他跟VMWa ...

  2. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  3. Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  4. Android 四种加载方式详解(standard singleTop singleTask singleInstance) .

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  5. VMware 虚拟机的网络连接方式详解

         VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作 ...

  6. 一次完整的HTTP网络请求过程详解

    0.  前言 从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析.TC ...

  7. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  8. thinkphp四种url访问方式详解

    本文实例分析了thinkphp的四种url访问方式.分享给大家供大家参考.具体分析如下: 一.什么是MVC thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行. M -Model 编 ...

  9. 「JavaScript」JS四种跨域方式详解

    原文地址https://segmentfault.com/a/1190000003642057 超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript ...

随机推荐

  1. 如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情.什么是patch?简单来讲,patch中存储的是你对代码的修改,生成patch就是记录 ...

  2. sqlserver 查询 inner join 同一表2次 只出一条查询结果

    inner join T_MTN_MobileNumber k on 1=1 and k.hddm='01' inner join (select a.hdxx+','+b.hdxx as hdxx ...

  3. svg和css实现波浪动效

    效果: 截图有点模糊~ 实现: <svg教程> //html <body> <svg class="wave-container" xmlns=&qu ...

  4. Sublime Text3时间戳查看转换插件的开发

    平常配置表中,经常需要用到时间配置,比如活动开始结束.从可读性上,我们喜欢2017-04-27 17:00:00,从程序角度,我们喜欢用1493283600.前者是包含时区概念的,而后者市区无关,所以 ...

  5. os和sys模块的区别及其常用方法总结

    官方解释:os: This module provides a portable way of using operating system dependent functionality. 翻译:提 ...

  6. git 学习笔记(常用命令)

    1.新建一个文件,如果没有使用git add 命令将它提交到暂存区,那么这个文件就还没有被跟踪. 2.通过配置.gitignore文件可以指定要忽略的文件,被忽略的文件夹是不会被提交到暂存区的.所以这 ...

  7. Codeforces Round #305 (Div. 2) A. Mike and Fax 暴力回文串

     A. Mike and Fax Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/548/pro ...

  8. MongoDB 复制(副本集)

    MongoDB复制是将数据同步在多个服务器的过程. 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制还允许您从硬件故障和服务中断中恢复数据. ...

  9. Freemarker商品详情页静态化服务调用处理

    --------------------------------------------------------------------------------------------- [版权申明: ...

  10. Spring中配置DataSource的六种方式

    第一种:beans.xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource ...