[Android-010][HttpClient使用]
HttpClient發送get請求建立一個用戶端對象
HttpClient client = new DefaultHttpClient();
建立一個get請求對象
HttpGet hg = new HttpGet(path);
發送get請求,建立串連,返迴響應頭對象
HttpResponse hr = hc.execute(hg);
擷取狀態行對象,擷取狀態代碼,如果為200則說明請求成功
if(hr.getStatusLine().getStatusCode() == 200){ //拿到伺服器返回的輸入資料流 InputStream is = hr.getEntity().getContent(); String text = Utils.getTextFromStream(is); }
發送post請求
//建立一個用戶端對象 HttpClient client = new DefaultHttpClient(); //建立一個post請求對象 HttpPost hp = new HttpPost(path);
往post對象裡放入要提交給伺服器的資料
//要提交的資料以索引值對的形式存在BasicNameValuePair對象中 List parameters = new ArrayList(); BasicNameValuePair bnvp = new BasicNameValuePair(name, name); BasicNameValuePair bnvp2 = new BasicNameValuePair(pass, pass); parameters.add(bnvp); parameters.add(bnvp2); //建立實體物件,指定進行URL編碼的碼錶 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, utf-8); //為post請求設定實體 hp.setEntity(entity);
非同步HttpClient架構
發送get請求
//建立非同步httpclient對象 AsyncHttpClient ahc = new AsyncHttpClient(); //發送get請求 ahc.get(path, new MyHandler());
注意AsyncHttpResponseHandler兩個方法的調用時機
class MyHandler extends AsyncHttpResponseHandler{ //http請求成功,返回碼為200,系統回調此方法 @Override public void onSuccess(int statusCode, Header[] headers, //responseBody的內容就是伺服器返回的資料 byte[] responseBody) { Toast.makeText(MainActivity.this, new String(responseBody), 0).show(); } //http請求失敗,返回碼不為200,系統回調此方法 @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { Toast.makeText(MainActivity.this, 返回碼不為200, 0).show(); } }
發送post請求使用RequestParams對象封裝要攜帶的資料
//建立非同步httpclient對象 AsyncHttpClient ahc = new AsyncHttpClient(); //建立RequestParams封裝要攜帶的資料 RequestParams rp = new RequestParams(); rp.add(name, name); rp.add(pass, pass); //發送post請求 ahc.post(path, rp, new MyHandler());