Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android入門筆記 - 網絡通信 - HttpClient

Android入門筆記 - 網絡通信 - HttpClient

編輯:關於Android編程

今天我們來學習怎麼使用 Apache 為android提供的網絡通信接口,如果要使用http協議,就需要使用 HttpClient。

使用HttpClient要比使用 HttpURLConnection更簡單一些,我們來看看代碼:

 

1. 使用get方法獲取網絡圖片:

調用:

 

		mBtnGet.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Bitmap picture = getNetPicture(http://192.168.1.19:8080/Web1/img.jpg);
				if (null != picture) {
					mImg.setImageBitmap(picture);
				}
			}
		});

 

方法:

 

	private Bitmap getNetPicture(String imgUrl) {
		Bitmap img = null;
		HttpClient client = null;
		HttpGet request = null;
		HttpResponse response = null;

		try {
			request = new HttpGet(imgUrl);
			client = new DefaultHttpClient();
			client.getParams().setParameter(
					CoreConnectionPNames.CONNECTION_TIMEOUT, 1000 * 5); // 鏈接超時
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,1000 * 5); // 讀取超時
			response = client.execute(request);
			if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
				InputStream is = response.getEntity().getContent();
                                //如果是返回得字符串,可以直接用 EntityUtils來處理
                                //EntityUtils.toString(response.getEntity());
				img = BitmapFactory.decodeStream(is);
			} else {
				showToast(get獲取網絡圖片失敗!);
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
			showToast(e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			showToast(e.getMessage());
		}
		return img;
	}
使用get方法比較簡單,如果要添加參數可以直接在url後面添加 ?par=???&par2=??? 來設置參數。這裡我們請求本地服務器上的一張圖片,沒有設置參數。

 

使用步驟:

(1)得到一個 HttpClient 對象 ,使用 HttpClient client = new DefaultHttpClient() ; 獲得

(2)設置超時參數(最好是設置,不然如果沒有訪到會等很久)

(3)new 一個 HttpGet 對象,並將url附給它。 HttpGet request = new HttpGet(url);

(4)獲得響應對象: HttpResponse response = client.excute(request);

(5)判斷 response的狀態碼是否成功,如果成功就可以進一步獲得流對象。 response.getEntiry().getContent() 來獲取流對象,拿到流之後,就可以想干什麼就干什麼了。

 

2. 使用post方法獲取網絡html文件:

調用:

 

		mBtnPost.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String content = getNetHtml(http://192.168.1.19:8080/Web1/login3.jsp);
				mTv.setText(content!=null ? content:獲取html失敗!);
			}
		});

 

方法:

 

	private String getNetHtml(String url){
		HttpClient client = null;
		HttpPost request = null;
		HttpResponse response = null;
		String data = null;
		
		client = new DefaultHttpClient();
		request = new HttpPost(url);
		List params = new ArrayList();
		params.add(new BasicNameValuePair(par, Httpclinet_android_post));
		try {
			HttpEntity entity = new UrlEncodedFormEntity(params, gb2312);
			request.setEntity(entity);
			client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000*5);
			client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 1000*5);
			response = client.execute(request);
			if(HttpStatus.SC_OK == response.getStatusLine().getStatusCode()){
				data = EntityUtils.toString(response.getEntity());
			}
			else{
				
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
			showToast(+e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			showToast(+e.getMessage());
		}
		return data;
	}

 

使用步驟:

相比於get方法,post方法總是要先設置一些參數,所以要復雜一點,不過也很簡單的啦。

(1)獲得HttpClient對象,設置超時。。。

(2)獲得 HttpPost對象,並將 url傳入。

(3)設置要傳遞的參數。post方法中使用到了 NameValuePair 來給Post請求設置參數。這是設置一個參數 par, 值為: Httpclient_android_post

 

		List params = new ArrayList();
		params.add(new BasicNameValuePair(par, Httpclinet_android_post));
		HttpEntity entity = new UrlEncodedFormEntity(params, gb2312);
request.setEntity(entity);

 



(4)接下來的步驟就和get一樣了。

 

 

運行效果:

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved