基于Android的网络编程探讨

2017-01-11 05:02
石家庄职业技术学院学报 2016年6期
关键词:调用编程江苏

瞿 苏

(江苏联合职业技术学院扬州商务分院 信息电子系,江苏 扬州 225000)

基于Android的网络编程探讨

瞿 苏

(江苏联合职业技术学院扬州商务分院 信息电子系,江苏 扬州 225000)

分析了在Android中利用HttpURLConnection和HttpClient通信方式访问网络的方法,并给出了实现代码.

HttpURLConnection;HttpClient;GET;POST

Google公司以网络搜索引擎起家,经过大胆的创意和不断的努力,目前已经成为网络世界的巨头之一.出自于Google之手的Android平台,在运用网络编程上也非常优秀.随着智能手机和平板电脑等移动终端设备的迅速发展,Internet已经不再只是传统的有线互联网,还包括移动互联网.同有线互联网一样,移动互联网也可以采用HTTP(超文本传输协议)访问网络.在Android中,网络通信的方法包括HttpURLConnection和HttpClient.

1 使用HttpURLConnection访问网络

Java.net包中包含HttpURLConnection抽象类,需要使用URL的openConnection()方法来获得,用于发送HTTP请求和获取HTTP响应.例如,要创建http://www.baidu.com网站对应的HttpURLConnection对象,可以使用下面的代码:

URL url=new URL(http://www.baidu.com/);

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

其中, openConnection()方法创建了HttpURLConnection对象,可设置连接超时的时间和请求方式等属性.创建好对象后,即可使用HTTP请求.HTTP请求分为GET请求和POST请求[1].

(1)发送GET请求

使用对象发送请求时,默认发送的是GET请求.因此,发送GET请求比较简单,只需要在指定连接地址时,先将要传递的参数通过“?参数名=参数值”进行传递,然后获取输入流中的数据,并关闭连接即可.要实现向服务器发送GET请求并获取服务器的响应结果,在程序编写时,需要有一个无返回值的send()方法,用于建立一个HTTP连接,并将输入的内容发送到Web服务器上,再读取服务器的处理结果.Send()方法代码如下:

public void send() {

String target="";

target = "http://192.168.1.66:8081/blog/index.jsp?content="

+Base64(content.getText().toString().trim());//要访问的URL地址

URL;

try {

url = new URL(target);

HttpURLConnection urlConn = (HttpURLConnection) url

openConnection();//创建一个HTTP连接

InputStreamReader in = new InputStreamReader(

urlConn.getInputStream()); // 获得读取的内容

BufferedReader buffer = new BufferedReader(in); // 获取输入流对象

String inputLine = null;

//通过循环逐行读取输入流中的内容

while ((inputLine = buffer.readLine()) != null) {

result += inputLine + " ";

}

in.close(); //关闭字符输入流对象

urlConn.disconnect(); //断开连接

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

注意,用GET请求方法传递中文参数时,会产生乱码.要解决乱码问题,可以采用Base64()方法[2],或者使用Java提供的URLEncoder类.

//对字符串进行Base64编码

public String Base64(String content){

try {

content=Base64.encodeToString(content.getBytes("utf-8"),Base64.DEFAULT);//对字符串进行Base64编码

content=URLEncoder.encode(content);//对字符串进行URL编码

} catch (UnsupportedEncodingException e) {

e.printStackTrace(); //输出异常信息

}

return content;

}

(2)发送POST请求

对于1024字节以内的数据采用GET方式发送请求,而对于较大数据则采用POST方式发送请求.Android中,GET是默认的发送请求方式,而发送POST请求时,需对其进行指定.例如,创建一个HTTP连接,并为该连接指定请求的发送方式为POST,可以使用下面的代码:

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

urlConn.setRequestMethod(“POST”);

这两句表示的是,创建一个HTTP连接并指定请求方式为POST.

与发送GET请求相比,发送POST请求较复杂,需通过HttpURLConnection类及其父类URLConnection提供的方法设置相关的内容,如表1所示.

表1 发送POST请求时常用的方法

2 使用HttpClient访问网络

访问某个简单页面可以使用HttpURLConnection类,而对于比较复杂的联网操作,可以使用Apache组织提供的HttpClient类访问网络,HttpClient封装了Java提供的访问网络的方法,如输入/输出流操作被统一封装成HttpGet,HttpPost和HttpResponse三类,分别代表发送GET请求、发送POST请求和处理响应的对象[3].HttpClient发送HTTP请求有两种形式.

(1)发送GET请求

HttpClient发送GET请求可分为以下几步:第一步,创建HttpClient对象和HttpGet对象;第二步,将要发送的参数连接到URL地址中,调用HttpGet的setParams()方法来添加请求参数;第三步,添加请求参数后,通过execute()方法发送请求,并返回一个HttpResponse对象;第四步,调用HttpResponse的getEntity()方法来获得HttpEntity对象中服务器的响应内容.

(2)发送POST请求

POST方式用于复杂的请求数据,和HttpURLconnection类的POST请求一样.使用HttpClient发送POST请求可分为以下几步:首先,创建HttpClient对象和HttpPost对象;其次,调用HttpPost的setParams()方法添加请求参数,与此同时,用setEntity()方法来设置请求参数;再次,添加请求参数后,调用HttpClient对象的execute()方法发送请求,并返回一个HttpResponse对象;最后,调用HttpResponse的getEntity()方法获取HttpEntity对象中服务器的响应内容.在程序编写时,需要编写一个无返回值的send(),用于建立一个使用POST请求方式的HTTP连接,并将输入的昵称和微博内容发送到Web服务器上,再读取服务器处理的结果[4].Send()方法的代码如下:

public void send() {

String target = "http://192.168.1.66:8081/blog/deal_httpclient.jsp";//要提交的目标地址

HttpClient httpclient = new DefaultHttpClient();//创建HttpClient对象

HttpPost httpRequest = new HttpPost(target);//创建HttpPost对象

//将要传递的参数保存到List集合中

List params = new ArrayList();

params.add(new BasicNameValuePair("param", "post"));//标记参数

params.add(new BasicNameValuePair("nickname", nickname.getText().toString()));//昵称

params.add(new BasicNameValuePair("content", content.getText().toString()));//内容

try {

httpRequest.setEntity(new UrlEncodedFormEntity(params, "utf-8"));//设置编码方式

HttpResponse httpResponse = httpclient.execute(httpRequest); //执行HttpClient请求

if (httpResponse.getStatusLine().getStatusCode() ==HttpStatus.SC_OK){//如果请求成功

result += EntityUtils.toString(httpResponse.getEntity());//获取返回的字符串

}else{

result = "请求失败!";

}

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();//输出异常信息

} catch (ClientProtocolException e) {

e.printStackTrace();//输出异常信息

} catch (IOException e) {

e.printStackTrace();//输出异常信息

}

}

3 结语

本文主要介绍了如何利用Android中的HttpURLConnection和HttpClient访问网络.访问简单页面提交请求并获取服务器的响应可以使用HttpURLConnection,而对于复杂的联网页面,需使用HttpClient来实现.HTTP请求分为GET请求和POST请求,GET请求方式适合发送1024字节以内的数据,POST方式则可以发送较大的数据.

[1] 王寅峰,许志良.AppInventor实践教程:Android智能应用开发前传[M].北京:电子工业出版社,2013:210-230.

[2] 吴杰,梁妍.基于实验案例分解和重构的Android网络编程教学改革探索[J].信息技术与信息化,2016(5):103-104.

[3] 王向辉.可视化开发Android应用程序——拼图开发模式App Inventor[M].北京:清华大学出版社,2013:231-253.

[4] 明日科技.Android从入门到精通[M].北京:清华大学出版社,2015:413-435.

责任编辑:金 欣

The Android-based network programming

QU Su

(Department of Information Technology, Yangzhou Business Branch of Jiangsu Union Technical Institute, Yangzhou, Jiangsu 225000, China)

This paper analyzes the method of using HttpURLConnection and HttpClient communication in access to the network in Android, and realizes the implementation code.

HttpURLConnection;HttpClient; GET; POST

2016-10-08

瞿 苏(1982-),女,江苏扬州人,江苏联合职业技术学院扬州商务分院讲师,硕士,研究方向:计算机应用技术.

1009-4873(2016)06-0067-03

TP311.52

:A

猜你喜欢
调用编程江苏
数读江苏
编程,是一种态度
元征X-431实测:奔驰发动机编程
数独江苏
编程小能手
数读江苏
纺织机上诞生的编程
核电项目物项调用管理的应用研究
江苏
LabWindows/CVI下基于ActiveX技术的Excel调用