第152页
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
(2)在该MainActivity中,创建程序中所需的成员变量,具体代码如下:
private EditText content; //声明一个输入文本内容的编辑框对象
private Button button; //声明一个“发表”按钮对象
private Handler handler; //声明一个Handler对象
private String result = ""; //声明一个代表显示内容的字符串
private TextView resultTV; //声明一个显示结果的文本框对象
(3)编写一个无返回值的send()方法,用于建立一个HTTP连接,并将输入的内容发送到Web服务器上,再读取服务器的处理结果,具体代码如下:
public void send() {
String target="";
target = "http://192.168.1.66:8081/blog/index.jsp?content="
+base64(content.getText().toString().trim()); //要访问的URL地址
URL url;
try {
url = new URL(target); //创建URL对象
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 + "\n";
}
in.close(); //关闭字符输入流对象
urlConn.disconnect(); //断开连接
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
(4)在应用GET方法传递中文的参数时,会产生乱码,这时可以进行Base64编码来解决乱码问题,为此,需要编写一个base64()方法,对要进行传递的参数进行Base64编码。base64()方法的具体代码如下:
public String base64(String content){
try {
//对字符串进行Base64编码
content=Base64.encodeToString(content.getBytes("utf-8"), Base64.DEFAULT);
content=URLEncoder.encode(content); //对字符串进行URL编码
} catch (UnsupportedEncodingException e) {
e.printStackTrace(); //输出异常信息
}
return content;
}
说明: 要解决应用GET方法传递中文参数时产生乱码的问题,也可以使用Java提供的URLEncoder类来实现。
(5)在onCreate()方法中,获取布局管理器中用于输入内容的编辑框、用于显示结果的文本框和“发表”按钮,并为“发表”按钮添加单击事件监听器,在重写的onClick()方法中,首先判断输入的内容是否为空,如果为空,则给出消息提示;否则,创建一个新的线程,调用send()方法发送并读取微博信息,具体代码如下:
content = (EditText) findViewById(R.id.content); //获取输入文本内容的EditText组件
resultTV = (TextView) findViewById(R.id.result); //获取显示结果的TextView组件
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(); //发送文本内容到Web服务器,并读取
Message m = handler.obtainMessage(); //获取一个Message
handler.sendMessage(m); //发送消息
}
}).start(); //开启线程
}
});
(6)创建一个Handler对象,在重写的handleMessage()方法中,当变量result不为空时,将其显示到结果文本框中,并清空编辑器,具体代码如下: