乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第153页

书籍名:《Android从入门到精通》    作者:明日科技


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";  //要提交的目标地址