乐读文学

Android从入门到精通

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

第152页

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




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不为空时,将其显示到结果文本框中,并清空编辑器,具体代码如下: