Android請求服務器的兩種方式--post, get的區別


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM