Android开发网络请求之GET和POST
2015-11-28 23:49
811 查看
下面分别使用GET和POST方式从网络后台拉取如下的JSON格式的数据,并在客户端进行解析:
{
"code": "200",
"message": "Get Success",
"result": [
{
"name": "Tom",
"age": 19,
"sex": "男"
},
{
"name": "Kate",
"age": 18,
"sex": "女"
},
{
"name": "Jim",
"age": 23,
"sex": "男"
}
]
}
[说明]JSON格式的数据中,大括号{ }包裹的则为JsonObject,而中括号[ ]包裹的则为JsonArray。
零.为了解析方便,首先创建一个Student的类,如下:
public class
Student
{
private
String name;
private
int age;
private
String sex;
public
Student()
{
}
// Getter和Setter方法
}
一.GET方式获取并解析JSON数据[/u]
public
HashMap<String,
Object> getStudentsInfos(String
account, String
password) throws
Exception
{
String
webUrl =
"http://mxd/study.php?account="
+
account +
"&password="
+ password;
HttpGet
httpGet = new HttpGet(webUrl);
HttpClient
httpClient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),
10 *
1000);// 设置请求超时
HttpConnectionParams.setSoTimeout(httpClient.getParams(),
10 *
1000);// 设置响应超时
HttpResponse
response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode()
== 200)
{
// =200表示拉取数据正常
return parseStudentsInfos(response);
}
else
{
HashMap<String,
Object> tempMap =
new HashMap<String, Object>();
tempMap.put("code",
"0");
tempMap.put("message",
"网络请求超时,请检查您的网络链接!");
return
tempMap;
}
}
private
HashMap<String,
Object> parseStudentsInfos(HttpResponse
response) throws
Exception
{
HttpEntity
httpEntity = response.getEntity();
InputStream
inputStream = httpEntity.getContent();
String
resultStr =
StreamTool.read(inputStream);
// 将输入流转化为_字符串
HashMap<String,
Object> infoMap =
new HashMap<String, Object>();
JSONObject
jsonObject = new JSONObject(resultStr);
String
code = jsonObject.getString("code");
infoMap.put("code",
code);
String
message = jsonObject.getString("message");
infoMap.put("message",
message);
if (code.equals("200"))
{
List<Student>
studentList = new ArrayList<Student>();
Student
student = null;
JSONObject
stuJson = null;
if (jsonObject.getJSONArray("result") !=
null)
{
JSONArray
result = jsonObject.getJSONArray("result");
int
videoCount =
result.length();
// 此处,避免在for的第二个参数处出现result.length()操作
for (int
i = 0; i <
videoCount; i++)
{
stuJson =
result.getJSONObject(i);
student = new Student();
// 实例化
student.setName_Studnet(stuJson.getString("name"));
student.setAge_Studnet(stuJson.getInt("age"));
student.setSex_Studnet(stuJson.getString("sex"));
studentList.add(student);
student = null;
stuJson =
null;
}
}
infoMap.put("studentList",
studentList);
}
return
infoMap;
}
二.POST方式获取并解析JSON数据
public
HashMap<String,
Object> getStudentsInfos(String
account, String
password) throws
Exception
{
String
urlpath =
"http://mxd/study.php";
NameValuePair
pair1 =
new BasicNameValuePair("account",
account);
// 传入参数
NameValuePair
pair2 =
new BasicNameValuePair("password",
password);// 传入参数
List<NameValuePair>
pairList = new ArrayList<NameValuePair>();
pairList.add(pair1);
pairList.add(pair2);
HttpEntity
requestHttpEntity =
new UrlEncodedFormEntity(pairList,
HTTP.UTF_8);
// 解决中文乱码的问题
HttpPost
httpPost =
new HttpPost(urlpath);//
URL使用基本URL即可,其中不需要加参数
httpPost.addHeader("charset",
HTTP.UTF_8);
// 设置编码格式
httpPost.setEntity(requestHttpEntity);//
将请求体内容加入请求中
HttpClient
httpClient =
new DefaultHttpClient();// 需要客户端对象来发送请求
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),
10 *
1000);// 设置请求超时
HttpConnectionParams.setSoTimeout(httpClient.getParams(),
10 *
1000);// 设置响应超时
HttpResponse
response =
httpClient.execute(httpPost);//
发送请求
if (response.getStatusLine().getStatusCode()
== 200)
{
return parseStudentsInfos(response);
}
else
{
HashMap<String,
Object> tempMap =
new HashMap<String, Object>();
tempMap.put("code",
"0");
tempMap.put("message",
"网络请求超时,请检查您的网络链接!");
return
tempMap;
}
}
private
HashMap<String,
Object> parseStudentsInfos(HttpResponse
response) throws
Exception
{
HttpEntity
httpEntity = response.getEntity();
InputStream
inputStream = httpEntity.getContent();
String
resultStr =
StreamTool.read(inputStream);
// 将输入流转化为_字符串
HashMap<String,
Object> infoMap =
new HashMap<String, Object>();
JSONObject
jsonObject = new JSONObject(resultStr);
String
code = jsonObject.getString("code");
infoMap.put("code",
code);
String
message = jsonObject.getString("message");
infoMap.put("message",
message);
if (code.equals("200"))
{
List<Student>
studentList = new ArrayList<Student>();
Student
student = null;
JSONObject
stuJson = null;
if (jsonObject.getJSONArray("result") !=
null)
{
JSONArray
result = jsonObject.getJSONArray("result");
int
videoCount =
result.length();
// 此处,避免在for的第二个参数处出现result.length()操作
for (int
i = 0; i <
videoCount; i++)
{
stuJson =
result.getJSONObject(i);
student =
new Student();
// 实例化
student.setName_Studnet(stuJson.getString("name"));
student.setAge_Studnet(stuJson.getInt("age"));
student.setSex_Studnet(stuJson.getString("sex"));
studentList.add(student);
student = null;
stuJson =
null;
}
}
infoMap.put("studentList",
studentList);
}
return
infoMap;
}
GET和POST方式中都用到了一个StreamTool这个工具类,负责将InputStream转化为String,StreamTool.java工具类如下:
package com.***.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* @This class is used to parse info from InputStream!
*/
public class
StreamTool
{
/**
*
@param is
* 输入流
*
@return 返回将输入流转化为 字符串之后
*
@throws Exception
*/
public
static String
read(InputStream
is) throws
Exception
{
BufferedReader
reader = new BufferedReader(new InputStreamReader(is));
String
result = "";
String
line = "";
while (null != (line =
reader.readLine()))
{
result +=
line;
}
is.close();
// 关闭输入流
return
result;
}
}
{
"code": "200",
"message": "Get Success",
"result": [
{
"name": "Tom",
"age": 19,
"sex": "男"
},
{
"name": "Kate",
"age": 18,
"sex": "女"
},
{
"name": "Jim",
"age": 23,
"sex": "男"
}
]
}
[说明]JSON格式的数据中,大括号{ }包裹的则为JsonObject,而中括号[ ]包裹的则为JsonArray。
零.为了解析方便,首先创建一个Student的类,如下:
public class
Student
{
private
String name;
private
int age;
private
String sex;
public
Student()
{
}
// Getter和Setter方法
}
一.GET方式获取并解析JSON数据[/u]
public
HashMap<String,
Object> getStudentsInfos(String
account, String
password) throws
Exception
{
String
webUrl =
"http://mxd/study.php?account="
+
account +
"&password="
+ password;
HttpGet
httpGet = new HttpGet(webUrl);
HttpClient
httpClient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),
10 *
1000);// 设置请求超时
HttpConnectionParams.setSoTimeout(httpClient.getParams(),
10 *
1000);// 设置响应超时
HttpResponse
response = httpClient.execute(httpGet);
if (response.getStatusLine().getStatusCode()
== 200)
{
// =200表示拉取数据正常
return parseStudentsInfos(response);
}
else
{
HashMap<String,
Object> tempMap =
new HashMap<String, Object>();
tempMap.put("code",
"0");
tempMap.put("message",
"网络请求超时,请检查您的网络链接!");
return
tempMap;
}
}
private
HashMap<String,
Object> parseStudentsInfos(HttpResponse
response) throws
Exception
{
HttpEntity
httpEntity = response.getEntity();
InputStream
inputStream = httpEntity.getContent();
String
resultStr =
StreamTool.read(inputStream);
// 将输入流转化为_字符串
HashMap<String,
Object> infoMap =
new HashMap<String, Object>();
JSONObject
jsonObject = new JSONObject(resultStr);
String
code = jsonObject.getString("code");
infoMap.put("code",
code);
String
message = jsonObject.getString("message");
infoMap.put("message",
message);
if (code.equals("200"))
{
List<Student>
studentList = new ArrayList<Student>();
Student
student = null;
JSONObject
stuJson = null;
if (jsonObject.getJSONArray("result") !=
null)
{
JSONArray
result = jsonObject.getJSONArray("result");
int
videoCount =
result.length();
// 此处,避免在for的第二个参数处出现result.length()操作
for (int
i = 0; i <
videoCount; i++)
{
stuJson =
result.getJSONObject(i);
student = new Student();
// 实例化
student.setName_Studnet(stuJson.getString("name"));
student.setAge_Studnet(stuJson.getInt("age"));
student.setSex_Studnet(stuJson.getString("sex"));
studentList.add(student);
student = null;
stuJson =
null;
}
}
infoMap.put("studentList",
studentList);
}
return
infoMap;
}
二.POST方式获取并解析JSON数据
public
HashMap<String,
Object> getStudentsInfos(String
account, String
password) throws
Exception
{
String
urlpath =
"http://mxd/study.php";
NameValuePair
pair1 =
new BasicNameValuePair("account",
account);
// 传入参数
NameValuePair
pair2 =
new BasicNameValuePair("password",
password);// 传入参数
List<NameValuePair>
pairList = new ArrayList<NameValuePair>();
pairList.add(pair1);
pairList.add(pair2);
HttpEntity
requestHttpEntity =
new UrlEncodedFormEntity(pairList,
HTTP.UTF_8);
// 解决中文乱码的问题
HttpPost
httpPost =
new HttpPost(urlpath);//
URL使用基本URL即可,其中不需要加参数
httpPost.addHeader("charset",
HTTP.UTF_8);
// 设置编码格式
httpPost.setEntity(requestHttpEntity);//
将请求体内容加入请求中
HttpClient
httpClient =
new DefaultHttpClient();// 需要客户端对象来发送请求
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(),
10 *
1000);// 设置请求超时
HttpConnectionParams.setSoTimeout(httpClient.getParams(),
10 *
1000);// 设置响应超时
HttpResponse
response =
httpClient.execute(httpPost);//
发送请求
if (response.getStatusLine().getStatusCode()
== 200)
{
return parseStudentsInfos(response);
}
else
{
HashMap<String,
Object> tempMap =
new HashMap<String, Object>();
tempMap.put("code",
"0");
tempMap.put("message",
"网络请求超时,请检查您的网络链接!");
return
tempMap;
}
}
private
HashMap<String,
Object> parseStudentsInfos(HttpResponse
response) throws
Exception
{
HttpEntity
httpEntity = response.getEntity();
InputStream
inputStream = httpEntity.getContent();
String
resultStr =
StreamTool.read(inputStream);
// 将输入流转化为_字符串
HashMap<String,
Object> infoMap =
new HashMap<String, Object>();
JSONObject
jsonObject = new JSONObject(resultStr);
String
code = jsonObject.getString("code");
infoMap.put("code",
code);
String
message = jsonObject.getString("message");
infoMap.put("message",
message);
if (code.equals("200"))
{
List<Student>
studentList = new ArrayList<Student>();
Student
student = null;
JSONObject
stuJson = null;
if (jsonObject.getJSONArray("result") !=
null)
{
JSONArray
result = jsonObject.getJSONArray("result");
int
videoCount =
result.length();
// 此处,避免在for的第二个参数处出现result.length()操作
for (int
i = 0; i <
videoCount; i++)
{
stuJson =
result.getJSONObject(i);
student =
new Student();
// 实例化
student.setName_Studnet(stuJson.getString("name"));
student.setAge_Studnet(stuJson.getInt("age"));
student.setSex_Studnet(stuJson.getString("sex"));
studentList.add(student);
student = null;
stuJson =
null;
}
}
infoMap.put("studentList",
studentList);
}
return
infoMap;
}
GET和POST方式中都用到了一个StreamTool这个工具类,负责将InputStream转化为String,StreamTool.java工具类如下:
package com.***.utils;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* @This class is used to parse info from InputStream!
*/
public class
StreamTool
{
/**
*
@param is
* 输入流
*
@return 返回将输入流转化为 字符串之后
*
@throws Exception
*/
public
static String
read(InputStream
is) throws
Exception
{
BufferedReader
reader = new BufferedReader(new InputStreamReader(is));
String
result = "";
String
line = "";
while (null != (line =
reader.readLine()))
{
result +=
line;
}
is.close();
// 关闭输入流
return
result;
}
}
相关文章推荐
- 使用HttpClient实现文件的下载
- java基础网络编程
- 网络编程
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 http://www.jb51.net/css/383986.html
- iOS网络监控— BMReachability
- Rosenblatt感知器详解
- redhat 的网络配置
- iOS开发网络-网络编程基础
- 最全的CSS浏览器兼容问题http://www.68design.net/Web-Guide/HTMLCSS/37154-1.html
- Debian GNU/Linux安装HP网络打印机
- VMware下CentOS网络搭建
- 高清网络视频监控系统中交换机的选择
- Http协议下的浏览器与服务器的交互
- Tinyhttpd源码解析
- administrator内置账户“ 网络无法访问,你可能没有权限使用网络资源,请与管理员联系...” 解决办法
- 【读书笔记】:网络安全复习
- 大端和小端(网络字节序和主机字节序)
- Java 网络编程
- android gradle project的时候connect refused:connect或者卡在building gradle download https:
- 零碎问题收集(自己收集的问题,解决方法有自己的、也有转自网络)