android中用get和post方式向服務器提交請求_瘋狂之橋_新浪博客
http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html
Android提交數據到服務器的兩種方式四種方法 - 從不曾離開的只有自由和夢想! - ITeye技術網站
http://keeponmoving.iteye.com/blog/1528472
android端向服務器提交請求的幾種方式 - Android移動開發技術文章_手機開發 - 紅黑聯盟
http://www.2cto.com/kf/201309/242510.html
// android中向服務器提交請求的兩種方式和四種方法 private String addr = "http://192.168.2.101:80/serlet/loginServlet"; /* 1. 在android中用get方式向服務器提交請求 */ public boolean get(String username, String password) throws Exception { username = URLEncoder.encode(username); password = URLEncoder.encode(password); String params = "Username = " + username + "&password = " + password; //將參數拼接在URl地址后面 URL url = new URL(address + "?" + params); //通過url地址打開連接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //設置超時時間 conn.setConnectTimeout(3000); //設置請求方式 conn.setRequestMethod("GET"); return conn.getResponseCode() == 200; } /* 2. HttpGet方式向服務器提交請求 --HttpClient */ //獲得要傳遞的數據 String username = et1.getText().toString(); String password = et2.getText().toString(); // 創建HttpGet對象 HttpGet request = new HttpGet(url +"name="+username+"&password="+password); // 使用execute方法發送HTTP GET請求,並返回HttpResponse對象 // DefaultHttpClient為Http客戶端管理類,負責發送請 HttpResponse response = httpClient.execute(request); // 判斷請求響應狀態碼,狀態碼為200表示服務端成功響應了客戶端的請求 if (response.getStatusLine().getStatusCode() == 200) { // 使用getEntity方法獲得返回結果 String data = EntityUtils.toString(response.getEntity(),"gbk"); //獲得Message對象 Message msg = handler.obtainMessage(1); //創建Bundle對象 Bundle bundle = new Bundle(); //用mes傳遞數據 msg.setData(bundle); //開啟Message對象 msg.sendToTarget(); } /* 3. post 方式向服務器提交請求 */ public boolean post(String username, String password) throws Exception { username = URLEncoder.encode(username); // 中文數據需要經過URL編碼 password = URLEncoder.encode(password); String params = "username=" + username + "&password=" + password; byte[] data = params.getBytes(); URL url = new URL(address); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(3000); //這是請求方式為POST conn.setRequestMethod("POST"); //設置post請求必要的請求頭 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 請求頭, 必須設置 conn.setRequestProperty("Content-Length", data.length + ""); // 注意是字節長度, 不是字符長度 conn.setDoOutput(true); // 准備寫出 conn.getOutputStream().write(data); // 寫出數據 return conn.getResponseCode() == 200; } /* 4. HttpPost方式向服務器提交請求 --HttpClient */ //把來傳遞的數據封裝到user對象中 User user = new User(); user.setUserName(et1.getText().toString()); user.setUserPass(et2.getText().toString()); //創建Post對象 HttpPost request = new HttpPost("http://10.0.2.2:8080/system/Servlet"); // 將需要傳遞的參數封裝到List<NameValuePair>類型的對象中 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("username", user.getUserName())); params.add(new BasicNameValuePair("password", user.getUserPass())); // 將封裝參數的對象存入request中,並設置編碼方式 request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); // DefaultHttpClient為Http客戶端管理類,負責發送請求和接受響應 HttpResponse response = defaultHttpClient.execute(request); // 判斷請求響應狀態碼,狀態碼為200表示服務端成功響應了客戶端的請求 if (response.getStatusLine().getStatusCode() == 200) { // 使用getEntity方法獲得返回結果 String data = EntityUtils.toString(response.getEntity(),"gdk"); //創建bundle對象 Bundle bundle = new Bundle(); //用bundle對象來封裝data數據 bundle.putString("data", data); //創建Message對象 Message mes = handler.obtainMessage(1); //存儲bundle數據 mes.setData(bundle); mes.sendToTarget(); }
1 /** 2 * @author Dylan 3 * 本類封裝了Android中向web服務器提交數據的兩種方式四種方法 4 */ 5 public class SubmitDataByHttpClientAndOrdinaryWay { 6 7 /** 8 * 使用get請求以普通方式提交數據 9 * @param map 傳遞進來的數據,以map的形式進行了封裝 10 * @param path 要求服務器servlet的地址 11 * @return 返回的boolean類型的參數 12 * @throws Exception 13 */ 14 public Boolean submitDataByDoGet(Map<String, String> map, String path) throws Exception { 15 // 拼湊出請求地址 16 StringBuilder sb = new StringBuilder(path); 17 sb.append("?"); 18 for (Map.Entry<String, String> entry : map.entrySet()) { 19 sb.append(entry.getKey()).append("=").append(entry.getValue()); 20 sb.append("&"); 21 } 22 sb.deleteCharAt(sb.length() - 1); 23 String str = sb.toString(); 24 System.out.println(str); 25 URL Url = new URL(str); 26 HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection(); 27 HttpConn.setRequestMethod("GET"); 28 HttpConn.setReadTimeout(5000); 29 // GET方式的請求不用設置什么DoOutPut()之類的嗎? 30 if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) { 31 return true; 32 } 33 return false; 34 } 35 36 /** 37 * 普通方式的DoPost請求提交數據 38 * @param map 傳遞進來的數據,以map的形式進行了封裝 39 * @param path 要求服務器servlet的地址 40 * @return 返回的boolean類型的參數 41 * @throws Exception 42 */ 43 public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception { 44 // 注意Post地址中是不帶參數的,所以newURL的時候要注意不能加上后面的參數 45 URL Url = new URL(path); 46 // Post方式提交的時候參數和URL是分開提交的,參數形式是這樣子的:name=y&age=6 47 StringBuilder sb = new StringBuilder(); 48 // sb.append("?"); 49 for (Map.Entry<String, String> entry : map.entrySet()) { 50 sb.append(entry.getKey()).append("=").append(entry.getValue()); 51 sb.append("&"); 52 } 53 sb.deleteCharAt(sb.length() - 1); 54 String str = sb.toString(); 55 56 HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection(); 57 HttpConn.setRequestMethod("POST"); 58 HttpConn.setReadTimeout(5000); 59 HttpConn.setDoOutput(true); 60 HttpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 61 HttpConn.setRequestProperty("Content-Length", String.valueOf(str.getBytes().length)); 62 OutputStream os = HttpConn.getOutputStream(); 63 os.write(str.getBytes()); 64 if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) { 65 return true; 66 } 67 return false; 68 } 69 70 /** 71 * 以HttpClient的DoGet方式向服務器發送請數據 72 * @param map 傳遞進來的數據,以map的形式進行了封裝 73 * @param path 要求服務器servlet的地址 74 * @return 返回的boolean類型的參數 75 * @throws Exception 76 */ 77 public Boolean submitDataByHttpClientDoGet(Map<String, String> map, String path) throws Exception { 78 HttpClient hc = new DefaultHttpClient(); 79 // 請求路徑 80 StringBuilder sb = new StringBuilder(path); 81 sb.append("?"); 82 for (Map.Entry<String, String> entry : map.entrySet()) { 83 sb.append(entry.getKey()).append("=").append(entry.getValue()); 84 sb.append("&"); 85 } 86 sb.deleteCharAt(sb.length() - 1); 87 String str = sb.toString(); 88 System.out.println(str); 89 HttpGet request = new HttpGet(sb.toString()); 90 91 HttpResponse response = hc.execute(request); 92 if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) { 93 return true; 94 } 95 return false; 96 } 97 98 /** 99 * 以HttpClient的DoPost方式提交數據到服務器 100 * @param map 傳遞進來的數據,以map的形式進行了封裝 101 * @param path 要求服務器servlet的地址 102 * @return 返回的boolean類型的參數 103 * @throws Exception 104 */ 105 public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception { 106 // 1. 獲得一個相當於瀏覽器對象HttpClient,使用這個接口的實現類來創建對象,DefaultHttpClient 107 HttpClient hc = new DefaultHttpClient(); 108 // DoPost方式請求的時候設置請求,關鍵是路徑 109 HttpPost request = new HttpPost(path); 110 // 2. 為請求設置請求參數,也即是將要上傳到web服務器上的參數 111 List<NameValuePair> parameters = new ArrayList<NameValuePair>(); 112 for (Map.Entry<String, String> entry : map.entrySet()) { 113 NameValuePair nameValuePairs = new BasicNameValuePair(entry.getKey(), entry.getValue()); 114 parameters.add(nameValuePairs); 115 } 116 // 請求實體HttpEntity也是一個接口,我們用它的實現類UrlEncodedFormEntity來創建對象,注意后面一個String類型的參數是用來指定編碼的 117 HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8"); 118 request.setEntity(entity); 119 // 3. 執行請求 120 HttpResponse response = hc.execute(request); 121 // 4. 通過返回碼來判斷請求成功與否 122 if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) { 123 return true; 124 } 125 return false; 126 } 127 }