第153页
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (result != null) {
resultTV.setText(result); //显示获得的结果
content.setText(""); //清空编辑框
}
super.handleMessage(msg);
}
};
(7)由于在本实例中需要访问网络资源,所以还需要在AndroidManifest.xml文件中指定允许访问网络资源的权限,具体代码如下:
另外,还需要编写一个Java Web实例,用于接收Android客户端发送的请求,并做出响应。这里编写一个名称为index.jsp的文件,在该文件中,首先获取参数content指定的微博信息,并保存到变量content中,然后替换变量content中的加号,这是由于在进行URL编码时,将加号转换为了%2B,最后对content进行Base64解码,并输出转码后的content变量的值,具体代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" import="sun.misc.BASE64Decoder"%>
<%
String content="";
if(request.getParameter("content")!=null){
content=request.getParameter("content"); //获取输入的微博信息
//替换content中的加号,这是由于在进行URL编码时,将"+"号转换为了%2B
content=content.replaceAll("%2B","+");
BASE64Decoder decoder=new BASE64Decoder();
content=new String(decoder.decodeBuffer(content),"utf-8"); //进行Base64解码
}
%>
<%="发表一条微博,内容如下:"%>
<%=content%>
将index.jsp文件放到Tomcat安装路径下的webapps\blog目录下,并启动Tomcat服务器,然后运行本实例,在屏幕上方的编辑框中输入一条微博信息,再单击“发表”按钮,在下方将显示Web服务器的处理结果。例如,输入“坚持到底就是胜利!”后,单击“发表”按钮,将显示如图14.1所示的运行结果。
图14.1 使用GET方式发表并显示微博信息
2. 发送POST请求
由于采用GET方式发送请求只适合发送大小在1024个字节以内的数据,所以当要发送的数据较大时,就需要使用POST方式来发送请求。在Android中,使用HttpURLConnection类发送请求时,默认采用的是GET请求,如果要发送POST请求,需要通过其setRequestMethod()方法进行指定。例如,创建一个HTTP连接,并为该连接指定请求的发送方式为POST,可以使用下面的代码:
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); //创建一个HTTP连接
urlConn.setRequestMethod("POST"); //指定请求方式为POST
发送POST请求要比发送GET请求复杂一些,它经常需要通过HttpURLConnection类及其父类URLConnection提供的方法设置相关内容,常用的方法如表14.1所示。
表14.1 发送POST请求时常用的方法
方 法 描 述
setDoInput(boolean newValue) 用于设置是否向连接中写入数据,如果参数值为true,表示写入数据;否则不写入数据
setDoOutput(boolean newValue) 用于设置是否从连接中读取数据,如果参数值为true,表示读取数据;否则不读取数据
setUseCaches(boolean newValue) 用于设置是否缓存数据,如果参数值为true,表示缓存数据;否则表示禁用缓存
setInstanceFollowRedirects(boolean followRedirects) 用于设置是否应该自动执行HTTP重定向,参数值为true时,表示自动执行;否则不自动执行
setRequestProperty(String field, String newValue) 用于设置一般请求属性,例如,要设置内容类型为表单数据,可以进行以下设置setRequestProperty("Content-Type","application/x-www-form-urlencoded")
下面通过一个具体的实例来介绍如何使用HttpURLConnection类发送POST请求。
例14.2 在Eclipse中创建Android项目,名称为14.2,实现向服务器发送POST请求,并获取服务器的响应结果。(实例位置:光盘\TM\sl\14\14.2)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的TextView组件删除,然后在默认添加的线性布局管理器中添加一个id为content的编辑框(用于输入微博内容)以及一个“发表”按钮,最后添加一个滚动视图,并在该视图中添加一个线性布局管理器,同时,还需要在该线性布局管理器中添加一个文本框,用于显示从服务器上读取的微博内容,具体代码请参见光盘。
(2)在该MainActivity中,创建程序中所需的成员变量,具体代码如下:
private EditText nickname; //声明一个输入昵称的编辑框对象
private EditText content; //声明一个输入文本内容的编辑框对象
private Button button; //声明一个"发表"按钮对象
private Handler handler; //声明一个Handler对象
private String result = ""; //声明一个代表显示内容的字符串
private TextView resultTV; //声明一个显示结果的文本框对象
(3)编写一个无返回值的send()方法,用于建立一个HTTP连接,并使用POST方式将输入的昵称和内容发送到Web服务器上,再读取服务器处理的结果,具体代码如下:
public void send() {
String target = "http://192.168.1.66:8081/blog/dealPost.jsp"; //要提交的目标地址