您的位置:首页 > 理论基础 > 计算机网络

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: