Android之URL訪問網絡

下面給出一段示例代碼,這個代碼採用了三種方式與網絡交互,分別指直接只用URL對象和使用URLConnection的Get與Post方式,並且爲URLConnection的Get與Post方式提供了一個工具類。

這個程序的佈局頁面很簡單,包括三個按鈕和一個標籤,如下圖,分別用來發送三種請求和顯示服務器消息

 

Activity代碼:

package com.example.hellourl;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import com.example.web.GetPostUtil;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

@SuppressLint("HandlerLeak")
public class MainActivity extends Activity {

	//頁面組件
	TextView txt;
	//URL按鈕
	Button btn;
	//發送GET請求按鈕
	Button btnGet;
	//發送POST請求按鈕
	Button btnPost;
	
	//服務器返回的消息
	String message = "";
	//服務器地址
	String urlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet?name='zz'&pwd='234'";
	String getUrlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet";
	String postUrlStr = "http://192.168.9.160:8080/WebTest2/servlet/ConnServlet";
	Handler hander = new Handler(){
		@Override
		public void handleMessage(Message msg){
			if(msg.what == 0x123){
				txt.setText(message);
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//獲取頁面按鈕
		btn = (Button) findViewById(R.id.button1);
		btnGet = (Button) findViewById(R.id.btnGet);
		btnPost = (Button) findViewById(R.id.btnPost);
		
		//獲取頁面顯示服務器返回消息的標籤
		txt = (TextView) findViewById(R.id.textView1);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				new Thread(){
					public void run(){
						try {
							//訪問服務器
							//創建URL對象
							URL url = new URL(urlStr);
							//打開URL對應的資源輸入流
							InputStream in = url.openStream();
							
							BufferedReader br = new BufferedReader(new InputStreamReader(in));
							message = new String(br.readLine().getBytes(),"UTF-8");
							//發送消息,通知UI組件顯示服務器返回消息
							hander.sendEmptyMessage(0x123);
							br.close();
						} catch (MalformedURLException e) {
							e.printStackTrace();
						} catch (IOException e) {
							e.printStackTrace();
						}
					}
				}.start();
			}
		});
		btnGet.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				new Thread(){
					public void run(){
						message = GetPostUtil.sendGet(getUrlStr, 
								"name='lili'&pwd='123'");
						//發送消息,通知UI組件顯示服務器返回消息
						hander.sendEmptyMessage(0x123);
					}
				}.start();
			}
		});
		btnPost.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				new Thread(){
					public void run(){
						message = GetPostUtil.sendPost(postUrlStr, 
								"name='xiaoming'&pwd='321'");
						//發送消息,通知UI組件顯示服務器返回消息
						hander.sendEmptyMessage(0x123);
					}
				}.start();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


URLConnection工具類:

package com.example.web;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class GetPostUtil {

	/**
	 * 向指定URL發送GET方法的請求
	 * @param url 被請求的url
	 * @param param 請求參數  格式:name1=value1&name2=value2
	 * @return 遠程資源的響應信息
	 */
	public static String  sendGet(String url,String param){
		String result = "";
		BufferedReader in = null;
		
		try {
			String urlStr = url + "?" +param;
			URL urlObj = new URL(urlStr);
			URLConnection conn = urlObj.openConnection();
			//設置通用的請求屬性
			conn.setRequestProperty("Accept-Language", "zh-cn");
			conn.setRequestProperty("Charset", "utf-8");
			//建立實際的連接
			conn.connect();
			//獲取所有響應頭字段
			Map<String,List<String>> map = conn.getHeaderFields();
			for(String key:map.keySet()){
				System.out.println("服務器返回頭信息"+key+":"+map.get(key));
			}
			//定義BufferedReader輸入流來讀取URL的響應
			in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line;
			while((line = in.readLine())!=null){
				result += "\n" + line;
			}
			
		} catch (Exception e) {
			System.out.println("發送GET請求出現異常\n"+e);
		}finally{
			try{
				if(in!=null){
					in.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
		return result;
	}

	/**
	 * 向指定URL發送POST方法的請求
	 * @param url 被請求的url
	 * @param param 請求參數  格式:name1=value1&name2=value2
	 * @return 遠程資源的響應信息
	 */
	public static String  sendPost(String url,String param){
		String result = "";
		BufferedReader in = null;
		PrintWriter out = null;
		try {
			URL urlObj = new URL(url);
			//打開和URL之間的連接
			URLConnection conn = urlObj.openConnection();
			//設置通用的請求屬性
			conn.setRequestProperty("Charset", "utf-8");
			//發送POST請求必須設置如下兩項
			conn.setDoOutput(true);
			conn.setDoInput(true);
			//獲取URLConnection對應的輸出流
			out = new PrintWriter(conn.getOutputStream());
			//發送請求參數
			out.print(param);
			out.flush();
			//定義BufferedReader輸入流來讀取URL的響應
			in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
			String line;
			while((line = in.readLine())!=null){
				result += "\n" + line;
			}
			
		} catch (Exception e) {
			System.out.println("發送POST請求出現異常\n"+e);
		}finally{
			try{
				if(out!=null){
					out.close();
				}
				if(in!=null){
					in.close();
				}
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		
		return result;
	}
}


服務器Servlet代碼

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String pwd =  request.getParameter("pwd");
		System.out.println(name+":"+pwd);
		request.setAttribute("name", "姓名:"+name);
		request.setAttribute("pwd", "密碼"+pwd);
		out.println(name+"GET方式web訪問成功");
		out.flush();
		out.close();
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		System.out.println(name+":"+pwd);
		request.setAttribute("name", "姓名:"+name);
		request.setAttribute("pwd", "密碼"+pwd);
		out.println(name+"POST方式訪問web成功");
		out.flush();
		out.close();
	}


  源碼下載:http://download.csdn.net/detail/u012081562/6970235

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章