万书网 > 文学作品 > Android从入门到精通 > 第157页

第157页





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();  //输出异常信息



}



}

(4)在onCreate()方法中,获取布局管理器中添加的昵称编辑框、内容编辑框、显示结果的文本框和“发表”按钮,并为“发表”按钮添加单击事件监听器,在重写的onClick()方法中,首先判断输入的昵称和内容是否为空,只要有一个为空,就给出消息提示;否则,创建一个新的线程,调用send()方法发送并读取服务器处理后的微博信息,具体代码如下:

content  =  (EditText)  findViewById(R.id.content);  //获取输入文本内容的EditText组件



resultTV  =  (TextView)  findViewById(R.id.result);  //获取显示结果的TextView组件



nickname=(EditText)findViewById(R.id.nickname);  //获取输入昵称的EditText组件



button  =  (Button)  findViewById(R.id.button);  //获取“发表”按钮组件



//为按钮添加单击事件监听器



button.setOnClickListener(new  OnClickListener()  {



@Override



public  void  onClick(View  v)  {



if  ("".equals(content.getText().toString()))  {



Toast.makeText(MainActivity.this,  "请输入要发表的内容!",Toast.LENGTH_SHORT).show();



return;



}



//创建一个新线程,用于发送并读取微博信息



new  Thread(new  Runnable()  {



public  void  run()  {



send();



Message  m  =  handler.obtainMessage();  //获取一个Message



handler.sendMessage(m);  //发送消息



}



}).start();  //开启线程



}



});

(5)创建一个Handler对象,在重写的handleMessage()方法中,当变量result不为空时,将其显示到结果文本框中,并清空昵称和内容编辑器,具体代码如下:

handler  =  new  Handler()  {



@Override



public  void  handleMessage(Message  msg)  {



if  (result  !=  null)  {



resultTV.setText(result);  //显示获得的结果



content.setText("");  //清空内容编辑框



nickname.setText("");  //清空昵称编辑框



}



super.handleMessage(msg);



}



};

(6)由于在本实例中需要访问网络资源,所以还需要在AndroidManifest.xml文件中指定允许访问网络资源的权限,具体代码如下:



另外,还需要编写一个Java  Web实例,用于接收Android客户端发送的请求,并做出响应。这里仍然使用例14.3中创建的deal_httpclient.jsp文件,在该文件的if语句的结尾处添加一个else  if语句,用于处理当请求参数param的值为post的情况。关键代码如下:

else  if("post".equals(param)){



String  content=request.getParameter("content");  //获取输入的微博信息



String  nickname=request.getParameter("nickname");  //获取输入昵称



if(content!=null  &&  nickname!=null){



nickname=new  String(nickname.getBytes("iso-8859-1"),"utf-8");  //对昵称进行转码



content=new  String(content.getBytes("iso-8859-1"),"utf-8");  //对内容进行转码



String  date=new  java.util.Date().toLocaleString();  //获取系统时间



out.println("[  "+nickname+"  ]于  "+date+"  发表一条微博,内容如下:");



out.println(content);



}



}

说明:  在上面的代码中,首先获取参数nickname和content指定的昵称和微博信息,并保存到相应的变量中,然后当昵称和微博内容均不为空时对其进行转码,并获取系统时间,同时组合微博信息输出到页面上。

将deal_httpclient.jsp文件放到Tomcat安装路径下的webapps/blog目录下,并启动Tomcat服务器,然后运行本实例,在屏幕上方的编辑框中输入昵称和微博信息,单击“发表”按钮,在下方将显示Web服务器的处理结果。实例运行结果如图14.4所示。



图14.4 应用HttpClient发送POST请求

14.1.3 范例1:从指定网站下载文件

例14.5   在Eclipse中创建Android项目,名称为14.5,实现从指定网站下载文件。(实例位置:光盘\TM\sl\14\14.5)