Android請(qǐng)求服務(wù)器的兩種方式--post, get的區(qū)別

android中用get和post方式向服務(wù)器提交請(qǐng)求瘋狂之橋新浪博客
http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html
Android提交數(shù)據(jù)到服務(wù)器的兩種方式四種方法 - 從不曾離開(kāi)的只有自由和夢(mèng)想! - ITeye技術(shù)網(wǎng)站
http://keeponmoving.iteye.com/blog/1528472
android端向服務(wù)器提交請(qǐng)求的幾種方式 - Android移動(dòng)開(kāi)發(fā)技術(shù)文章_手機(jī)開(kāi)發(fā) - 紅黑聯(lián)盟
http://www.2cto.com/kf/201309/242510.html


// android中向服務(wù)器提交請(qǐng)求的兩種方式和四種方法

private String addr = "http://192.168.2.101:80/serlet/loginServlet";

/* 1. 在android中用get方式向服務(wù)器提交請(qǐng)求 */

public boolean get(String username, String password) throws Exception {
username = URLEncoder.encode(username);
password = URLEncoder.encode(password);
String params = "Username = " + username + "&password = " + password;
//將參數(shù)拼接在URl地址后面
URL url = new URL(address + "?" + params);
//通過(guò)url地址打開(kāi)連接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//設(shè)置超時(shí)時(shí)間
conn.setConnectTimeout(3000);
//設(shè)置請(qǐng)求方式
conn.setRequestMethod("GET");
return conn.getResponseCode() == 200;
}


/* 2. HttpGet方式向服務(wù)器提交請(qǐng)求 --HttpClient */

//獲得要傳遞的數(shù)據(jù)
String username = et1.getText().toString();
String password = et2.getText().toString();

// 創(chuàng)建HttpGet對(duì)象
HttpGet request = new HttpGet(url +"name="+username+"&password="+password);
// 使用execute方法發(fā)送HTTP GET請(qǐng)求侍郭,并返回HttpResponse對(duì)象
// DefaultHttpClient為Http客戶端管理類珊佣,負(fù)責(zé)發(fā)送請(qǐng)
HttpResponse response = httpClient.execute(request);
// 判斷請(qǐng)求響應(yīng)狀態(tài)碼悔详,狀態(tài)碼為200表示服務(wù)端成功響應(yīng)了客戶端的請(qǐng)求
if (response.getStatusLine().getStatusCode() == 200) {
     // 使用getEntity方法獲得返回結(jié)果
     String data = EntityUtils.toString(response.getEntity(),"gbk");
     //獲得Message對(duì)象
     Message msg = handler.obtainMessage(1);
    //創(chuàng)建Bundle對(duì)象
     Bundle bundle = new Bundle();
     //用mes傳遞數(shù)據(jù)
     msg.setData(bundle);
    //開(kāi)啟Message對(duì)象
     msg.sendToTarget();
}

/* 3. post 方式向服務(wù)器提交請(qǐng)求 */
public boolean post(String username, String password)     throws Exception {
username = URLEncoder.encode(username); // 中文數(shù)據(jù)需要經(jīng)過(guò)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);
//這是請(qǐng)求方式為POST
conn.setRequestMethod("POST");
//設(shè)置post請(qǐng)求必要的請(qǐng)求頭
// 請(qǐng)求頭, 必須設(shè)置
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
// 注意是字節(jié)長(zhǎng)度, 不是字符長(zhǎng)度
conn.setRequestProperty("Content-Length", data.length + ""); 

conn.setDoOutput(true); // 準(zhǔn)備寫(xiě)出
conn.getOutputStream().write(data); // 寫(xiě)出數(shù)據(jù)

return conn.getResponseCode() == 200;
}


/* 4. HttpPost方式向服務(wù)器提交請(qǐng)求 --HttpClient */

把來(lái)傳遞的數(shù)據(jù)封裝到user對(duì)象中

User user = new User();

user.setUserName(et1.getText().toString());

user.setUserPass(et2.getText().toString());

//創(chuàng)建Post對(duì)象
HttpPost request = new HttpPost("http://10.0.2.2:8080/system/Servlet");

// 將需要傳遞的參數(shù)封裝到List<NameValuePair>類型的對(duì)象中
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", user.getUserName()));
params.add(new BasicNameValuePair("password", user.getUserPass()));

// 將封裝參數(shù)的對(duì)象存入request中,并設(shè)置編碼方式
request.setEntity(new UrlEncodedFormEntity(params,
  HTTP.UTF_8));

// DefaultHttpClient為Http客戶端管理類瘦赫,負(fù)責(zé)發(fā)送請(qǐng)求和接受響應(yīng)
HttpResponse response = defaultHttpClient.execute(request);

// 判斷請(qǐng)求響應(yīng)狀態(tài)碼丽啡,狀態(tài)碼為200表示服務(wù)端成功響應(yīng)了客戶端的請(qǐng)求
if (response.getStatusLine().getStatusCode() == 200) {
     // 使用getEntity方法獲得返回結(jié)果
     String data = EntityUtils.toString(response.getEntity(),"gdk");
     //創(chuàng)建bundle對(duì)象
     Bundle bundle = new Bundle();
     //用bundle對(duì)象來(lái)封裝data數(shù)據(jù)
     bundle.putString("data", data);
     //創(chuàng)建Message對(duì)象
     Message mes = handler.obtainMessage(1);
     //存儲(chǔ)bundle數(shù)據(jù)
     mes.setData(bundle);

     mes.sendToTarget();
}

/**
 * @author Dylan
 * 本類封裝了Android中向web服務(wù)器提交數(shù)據(jù)的兩種方式四種方法
 */
public class SubmitDataByHttpClientAndOrdinaryWay {

/**
 * 使用get請(qǐng)求以普通方式提交數(shù)據(jù)
 * @param map 傳遞進(jìn)來(lái)的數(shù)據(jù)辱匿,以map的形式進(jìn)行了封裝
 * @param path 要求服務(wù)器servlet的地址
 * @return 返回的boolean類型的參數(shù)
 * @throws Exception
 */
public Boolean submitDataByDoGet(Map<String, String> map, String path) throws Exception {
    // 拼湊出請(qǐng)求地址
    StringBuilder sb = new StringBuilder(path);
    sb.append("?");
    for (Map.Entry<String, String> entry : map.entrySet()) {
        sb.append(entry.getKey()).append("=").append(entry.getValue());
        sb.append("&");
    }
    sb.deleteCharAt(sb.length() - 1);
    String str = sb.toString();
    System.out.println(str);
    URL Url = new URL(str);
    HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
    HttpConn.setRequestMethod("GET");
    HttpConn.setReadTimeout(5000);
    // GET方式的請(qǐng)求不用設(shè)置什么DoOutPut()之類的嗎刃永?
    if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
        return true;
    }
    return false;
}

/**
 * 普通方式的DoPost請(qǐng)求提交數(shù)據(jù)
 * @param map 傳遞進(jìn)來(lái)的數(shù)據(jù),以map的形式進(jìn)行了封裝
 * @param path 要求服務(wù)器servlet的地址
 * @return 返回的boolean類型的參數(shù)
 * @throws Exception
 */
public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception {
    // 注意Post地址中是不帶參數(shù)的羊精,所以newURL的時(shí)候要注意不能加上后面的參數(shù)
    URL Url = new URL(path);
    // Post方式提交的時(shí)候參數(shù)和URL是分開(kāi)提交的斯够,參數(shù)形式是這樣子的:name=y&age=6
    StringBuilder sb = new StringBuilder();
    // sb.append("?");
    for (Map.Entry<String, String> entry : map.entrySet()) {
        sb.append(entry.getKey()).append("=").append(entry.getValue());
        sb.append("&");
    }
    sb.deleteCharAt(sb.length() - 1);
    String str = sb.toString();

    HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
    HttpConn.setRequestMethod("POST");
    HttpConn.setReadTimeout(5000);
    HttpConn.setDoOutput(true);
    HttpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    HttpConn.setRequestProperty("Content-Length", String.valueOf(str.getBytes().length));
    OutputStream os = HttpConn.getOutputStream();
    os.write(str.getBytes());
    if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
        return true;
    }
    return false;
}

/**
 * 以HttpClient的DoGet方式向服務(wù)器發(fā)送請(qǐng)數(shù)據(jù)
 * @param map 傳遞進(jìn)來(lái)的數(shù)據(jù),以map的形式進(jìn)行了封裝
 * @param path 要求服務(wù)器servlet的地址
 * @return 返回的boolean類型的參數(shù)
 * @throws Exception
 */
public Boolean submitDataByHttpClientDoGet(Map<String, String> map, String path) throws Exception {
    HttpClient hc = new DefaultHttpClient();
    // 請(qǐng)求路徑
    StringBuilder sb = new StringBuilder(path);
    sb.append("?");
    for (Map.Entry<String, String> entry : map.entrySet()) {
        sb.append(entry.getKey()).append("=").append(entry.getValue());
        sb.append("&");
    }
    sb.deleteCharAt(sb.length() - 1);
    String str = sb.toString();
    System.out.println(str);
    HttpGet request = new HttpGet(sb.toString());

    HttpResponse response = hc.execute(request);
    if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
        return true;
    }
    return false;
}

/**
 * 以HttpClient的DoPost方式提交數(shù)據(jù)到服務(wù)器
 * @param map 傳遞進(jìn)來(lái)的數(shù)據(jù)喧锦,以map的形式進(jìn)行了封裝
 * @param path 要求服務(wù)器servlet的地址
 * @return 返回的boolean類型的參數(shù)
 * @throws Exception
 */
public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception {
    // 1. 獲得一個(gè)相當(dāng)于瀏覽器對(duì)象HttpClient读规,使用這個(gè)接口的實(shí)現(xiàn)類來(lái)創(chuàng)建對(duì)象,DefaultHttpClient
    HttpClient hc = new DefaultHttpClient();
    // DoPost方式請(qǐng)求的時(shí)候設(shè)置請(qǐng)求燃少,關(guān)鍵是路徑
    HttpPost request = new HttpPost(path);
    // 2. 為請(qǐng)求設(shè)置請(qǐng)求參數(shù)束亏,也即是將要上傳到web服務(wù)器上的參數(shù)
    List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    for (Map.Entry<String, String> entry : map.entrySet()) {
        NameValuePair nameValuePairs = new BasicNameValuePair(entry.getKey(), entry.getValue());
        parameters.add(nameValuePairs);
    }
    // 請(qǐng)求實(shí)體HttpEntity也是一個(gè)接口,我們用它的實(shí)現(xiàn)類UrlEncodedFormEntity來(lái)創(chuàng)建對(duì)象阵具,注意后面一個(gè)String類型的參數(shù)是用來(lái)指定編碼的
    HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");
    request.setEntity(entity);
    // 3. 執(zhí)行請(qǐng)求
    HttpResponse response = hc.execute(request);
    // 4. 通過(guò)返回碼來(lái)判斷請(qǐng)求成功與否
    if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
        return true;
    }
    return false;
}
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碍遍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阳液,更是在濱河造成了極大的恐慌怕敬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘皿,死亡現(xiàn)場(chǎng)離奇詭異东跪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鹰溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門虽填,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人曹动,你說(shuō)我怎么就攤上這事斋日。” “怎么了仁期?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵桑驱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我跛蛋,道長(zhǎng)熬的,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任赊级,我火速辦了婚禮押框,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘理逊。我一直安慰自己橡伞,他們只是感情好盒揉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著兑徘,像睡著了一般刚盈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挂脑,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天藕漱,我揣著相機(jī)與錄音,去河邊找鬼崭闲。 笑死肋联,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刁俭。 我是一名探鬼主播橄仍,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牍戚!你這毒婦竟也來(lái)了侮繁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤如孝,失蹤者是張志新(化名)和其女友劉穎鼎天,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體暑竟,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斋射,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了但荤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罗岖。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腹躁,靈堂內(nèi)的尸體忽然破棺而出桑包,到底是詐尸還是另有隱情,我是刑警寧澤纺非,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布哑了,位于F島的核電站,受9級(jí)特大地震影響烧颖,放射性物質(zhì)發(fā)生泄漏弱左。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一炕淮、第九天 我趴在偏房一處隱蔽的房頂上張望拆火。 院中可真熱鬧,春花似錦、人聲如沸们镜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)模狭。三九已至剪芥,卻和暖如春悯森,著一層夾襖步出監(jiān)牢的瞬間砸捏,已是汗流浹背躯嫉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工摹量, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硬爆,地道東北人呻拌。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓膀藐,卻偏偏與公主長(zhǎng)得像萌朱,于是被迫代替她去往敵國(guó)和親宴树。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容