Android中Web开发之通过标准Java接口处理Http请求

处理GET请求核心代码

[java][/java] view plaincopy

  1. import java.net.*;import java.io.*;
  2. URL url = “http://10.0.2.2/android/http_get.jsp?username=tom”;
  3. // 使用HttpURLConnection打开连接
  4. HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
  5. // 得到读取的内容(流)
  6. InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
  7. // 为输出创建BufferedReader
  8. BufferedReader buffer = new BufferedReader(in);
  9. String inputLine = null;
  10. // 使用循环来读取获得的数据
  11. while (((inputLine = buffer.readLine()) != null)) {
  12.     resultData += inputLine + “\n”;
  13. }

 

处理POST请求核心代码

[java][/java] view plaincopy

  1. HttpURLConnection urlConn = (HttpURLConnection)
  2. urlConn.setDoOutput(true);
  3. urlConn.setDoInput(true);
  4. urlConn.setRequestMethod(“POST”);// 设置以POST方式
  5. DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());
  6. // 要上传的参数
  7. String content = “par=” + URLEncoder.encode(“ABCDEFG中文”, “UTF-8”);
  8. out.writeBytes(content);// 将要上传的内容写入流中
  9. // 得到读取的内容(流)
  10. InputStreamReader in = new InputStreamReader(urlConn.getInputStream());
  11. …//和GET等同

 

处理GET请求方法

发送GET请求并获取服务器端返回值:

[java][/java] view plaincopy

  1. public String handleGet(String strUrl) {
  2.     try {
  3.         URL url = new URL(strUrl);
  4.         // 使用HttpURLConnection打开连接
  5.         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  6.         conn.connect();//打开到此 URL 引用的资源的通信链接
  7.         // 得到读取的内容(流)
  8.         InputStream stream = conn.getInputStream();
  9.         byte[] data = new byte[100*1024];
  10.         int len = stream.read(data);
  11.         result = new String(data, 0, len);
  12.         result =  EncodingUtils.getString(result.getBytes(), “UTF-8”);//编码工具类解决中文乱码
  13.         conn.disconnect();//指示服务器近期不太可能有其他请求
  14.         stream.close();
  15.     } catch (Exception ee) {
  16.         System.out.print(“ee:” + ee.getMessage());
  17.     }
  18.     return result;
  19. }

处理POST请求方法

携带一个params数据发送Post请求到指Url:

[java][/java] view plaincopy

  1. public String handlePost(String strUrl, String params) {
  2.     try {
  3.         URL url = new URL(strUrl);
  4.         // 使用HttpURLConnection打开连接
  5.         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  6.         conn.setRequestMethod(“POST”);//设置 URL 请求的方法
  7.         conn.setDoInput(true);//允许接收输入
  8.         conn.setDoOutput(true);//允许接收输出
  9.         //conn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
  10.         conn.connect();//打开到此 URL 引用的资源的通信链接
  11.         //用DataOutputStream.writeBytes(content)将请求参数写入进去
  12.         DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
  13.         dos.writeBytes(params);
  14.         dos.close();
  15.         try {
  16.             //获取该连接的输入
  17.             InputStream stream = conn.getInputStream();
  18.             byte[] data = new byte[100* 1024];
  19.             int len = stream.read(data);
  20.             result = new String(data, 0, len);
  21.             result =  EncodingUtils.getString(result.getBytes(), “UTF-8”);
  22.             conn.disconnect();//指示服务器近期不太可能有其他请求
  23.             stream.close();
  24.         } catch (Exception e) {
  25.             System.out.print(“e:” + e.getMessage());
  26.         }
  27.     } catch (Exception e) {
  28.         System.out.print(“e:” + e.getMessage());
  29.     }
  30.     return result;
  31. }

 

应用实例

为了更加清晰的理解上述两个方法,可通过下述实例进行练习。
【注】服务请求是应该写在Handler中,配合线程一起使用的,在这里为了测试简便而暂不使用。
具体应用可参考:http://blog.csdn.net/jueblog/article/details/12530751

Activity

[java][/java] view plaincopy

  1. package com.app.myweb;
  2. import java.io.DataOutputStream;
  3. import java.io.InputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6. import org.apache.http.util.EncodingUtils;
  7. import android.app.Activity;
  8. import android.graphics.drawable.Drawable;
  9. import android.os.Bundle;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14. /**
  15.  * 范例:通过标准Java接口处理Http请求
  16.  */
  17. public class JavaHttp_JSP extends Activity implements OnClickListener {
  18.     private TextView textView1, textView2;
  19.     private Button button1, button2;
  20.     private String result;
  21.     @Override
  22.     public void onCreate(Bundle savedInstanceState) {
  23.         super.onCreate(savedInstanceState);
  24.         setContentView(R.layout.http_jsp);
  25.         setUI(); setAction();
  26.     }
  27.     public void setUI() {
  28.         textView1 = (TextView) findViewById(R.id.textView1);
  29.         /*textView1.setText(“利用Java标准接口java.net.*类实现读取指定url内容”);*/
  30.         textView2 = (TextView) findViewById(R.id.textView2);
  31.         button1 = (Button) findViewById(R.id.button1);
  32.         button2 = (Button) findViewById(R.id.button2);
  33.     }
  34.     public void setAction() {
  35.         findViewById(R.id.button1).setOnClickListener(this);
  36.         findViewById(R.id.button2).setOnClickListener(this);
  37.     }
  38.     /** 发送GET请求并获取服务器端返回值 */
  39.     public String handleGet(String strUrl) {
  40.         try {
  41.             URL url = new URL(strUrl);
  42.             // 使用HttpURLConnection打开连接
  43.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  44.             conn.connect();//打开到此 URL 引用的资源的通信链接
  45.             // 得到读取的内容(流)
  46.             InputStream stream = conn.getInputStream();
  47.             byte[] data = new byte[100*1024];
  48.             int len = stream.read(data);
  49.             result = new String(data, 0, len);
  50.             result =  EncodingUtils.getString(result.getBytes(), “UTF-8”);//编码工具类解决中文乱码
  51.             conn.disconnect();//指示服务器近期不太可能有其他请求
  52.             stream.close();
  53.         } catch (Exception ee) {
  54.             System.out.print(“ee:” + ee.getMessage());
  55.         }
  56.         return result;
  57.     }
  58.     /** 携带一个params数据发送Post请求到指Url */
  59.     public String handlePost(String strUrl, String params) {
  60.         try {
  61.             URL url = new URL(strUrl);
  62.             // 使用HttpURLConnection打开连接
  63.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  64.             conn.setRequestMethod(“POST”);//设置 URL 请求的方法
  65.             conn.setDoInput(true);//允许接收输入
  66.             conn.setDoOutput(true);//允许接收输出
  67.             //conn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
  68.             conn.connect();//打开到此 URL 引用的资源的通信链接
  69.             //用DataOutputStream.writeBytes(content)将请求参数写入进去
  70.             DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
  71.             dos.writeBytes(params);
  72.             dos.close();
  73.             try {
  74.                 //获取该连接的输入
  75.                 InputStream stream = conn.getInputStream();
  76.                 byte[] data = new byte[100* 1024];
  77.                 int len = stream.read(data);
  78.                 result = new String(data, 0, len);
  79.                 result =  EncodingUtils.getString(result.getBytes(), “UTF-8”);
  80.                 conn.disconnect();//指示服务器近期不太可能有其他请求
  81.                 stream.close();
  82.             } catch (Exception e) {
  83.                 System.out.print(“e:” + e.getMessage());
  84.             }
  85.         } catch (Exception e) {
  86.             System.out.print(“e:” + e.getMessage());
  87.         }
  88.         return result;
  89.     }
  90.     @Override
  91.     public void onClick(View view) {
  92.         switch (view.getId()) {
  93.         case R.id.button1:
  94.             textView1.setText(handleGet(“http://10.0.2.2:8888/android/1.jsp”));
  95.             break;
  96.         case R.id.button2:
  97.             textView2.setText(handlePost(“http://10.0.2.2:8888/android/2.jsp” , “username=tom&password=111”));
  98.             break;
  99.         default:
  100.             break;
  101.         }
  102.     }
  103. }

XML布局文件

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <ScrollView xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:layout_width=”fill_parent”
  4.     android:layout_height=”fill_parent” >
  5.    <LinearLayout
  6.         android:layout_width=”fill_parent”
  7.         android:layout_height=”wrap_content”
  8.         android:orientation=”vertical” >
  9.         <TextView
  10.             android:id=”@+id/textView1″
  11.             android:layout_width=”wrap_content”
  12.             android:layout_height=”wrap_content”
  13.             android:singleLine=”false”
  14.             android:text=”接收GET请求” />
  15.         <Button
  16.             android:id=”@+id/button1″
  17.             android:layout_width=”fill_parent”
  18.             android:layout_height=”wrap_content”
  19.             android:text=”标准Java接口:发送GET请求” />
  20.         <TextView
  21.             android:id=”@+id/textView2″
  22.             android:layout_width=”fill_parent”
  23.             android:layout_height=”wrap_content”
  24.             android:singleLine=”false”
  25.             android:text=”接收Post请求” />
  26.         <Button
  27.             android:id=”@+id/button2″
  28.             android:layout_width=”fill_parent”
  29.             android:layout_height=”wrap_content”
  30.             android:text=”标准Java接口:发送POST请求” />
  31.         <TextView
  32.             android:id=”@+id/textView3″
  33.             android:layout_width=”fill_parent”
  34.             android:layout_height=”wrap_content”
  35.             android:singleLine=”false”
  36.             android:text=”” />
  37.     </LinearLayout>
  38. </ScrollView>

标签