URL url;
try {
url = new URL(target);
HttpURLConnection urlConn = (HttpURLConnection) url
.openConnection(); //创建一个HTTP连接
urlConn.setRequestMethod("POST"); //指定使用POST请求方式
urlConn.setDoInput(true); //向连接中写入数据
urlConn.setDoOutput(true); //从连接中读取数据
urlConn.setUseCaches(false); //禁止缓存
urlConn.setInstanceFollowRedirects(true); //自动执行HTTP重定向
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded"); //设置内容类型
DataOutputStream out = new DataOutputStream(
urlConn.getOutputStream()); //获取输出流
String param = "nickname="
+ URLEncoder.encode(nickname.getText().toString(), "utf-8")
+ "&content="
+ URLEncoder.encode(content.getText().toString(), "utf-8"); //连接要提交的数据
out.writeBytes(param); //将要传递的数据写入数据输出流
out.flush(); //输出缓存
out.close(); //关闭数据输出流
//判断是否响应成功
if (urlConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStreamReader in = new InputStreamReader(
urlConn.getInputStream()); //获得读取的内容
BufferedReader buffer = new BufferedReader(in); //获取输入流对象
String inputLine = null;
while ((inputLine = buffer.readLine()) != null) {
result += inputLine + "\n";
}
in.close(); //关闭字符输入流
}
urlConn.disconnect(); //断开连接
} catch (MalformedURLException 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客户端发送的请求,并做出响应。这里编写一个名称为dealPost.jsp的文件,在该文件中,首先获取参数nickname和content指定的昵称和微博信息,并保存到相应的变量中,然后当昵称和微博内容均不为空时,对其进行转码,并获取系统时间,同时组合微博信息输出到页面上,具体代码如下:
<%@ page contentType="text/html; charset=utf-8" language="java" %>