本章目的: 實現在Android用戶端請求我們上篇建立的WCF資料服務.
此部分分為 建立Http請求 跟 接受WCF 返回的資料.
一. 建立Http請求的方法
protected String getRequest(String url, DefaultHttpClient client)<br /> throws Exception {<br /> String result = null;<br /> int statusCode = 0;<br /> HttpGet getMethod = new HttpGet(url);<br /> Log.d(TAG, "do the getRequest,url=" + url + "");<br /> try {<br /> getMethod.setHeader("User-Agent", USER_AGENT);<br /> // HttpParams params = new HttpParams();</p><p> // 添加使用者密碼驗證資訊<br /> // client.getCredentialsProvider().setCredentials(<br /> // new AuthScope(null, -1),<br /> // new UsernamePasswordCredentials(mUsername, mPassword));</p><p> HttpResponse httpResponse = client.execute(getMethod);<br /> // statusCode == 200 正常<br /> statusCode = httpResponse.getStatusLine().getStatusCode();<br /> Log.d(TAG, "statuscode = " + statusCode);<br /> // 處理返回的httpResponse資訊<br /> result = retrieveInputStream(httpResponse.getEntity());<br /> } catch (Exception e) {<br /> Log.e(TAG, e.getMessage());<br /> throw new Exception(e);<br /> } finally {<br /> getMethod.abort();<br /> }<br /> return result;<br /> }<br />
參數URL: 我們要請求的地址
Client: 這個可以直接用new DefaultHttpClient(new BasicHttpParams()) 來初始化.
這個方法中需要注意RetrieveInputStream方法, 這個是當Http請求完成之後, 用來處理伺服器返回資料的方法,
二. 接受從WCF端傳回的資料
protected String retrieveInputStream(HttpEntity httpEntity) {<br /> int length = (int) httpEntity.getContentLength();<br /> if (length < 0)<br /> length = 10000;<br /> StringBuffer stringBuffer = new StringBuffer(length);<br /> try {<br /> InputStreamReader inputStreamReader = new InputStreamReader(<br /> httpEntity.getContent(), HTTP.UTF_8);<br /> char buffer[] = new char[length];<br /> int count;<br /> while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {<br /> stringBuffer.append(buffer, 0, count);<br /> }<br /> } catch (UnsupportedEncodingException e) {<br /> Log.e(TAG, e.getMessage());<br /> } catch (IllegalStateException e) {<br /> Log.e(TAG, e.getMessage());<br /> } catch (IOException e) {<br /> Log.e(TAG, e.getMessage());<br /> }<br /> return stringBuffer.toString();<br /> }<br />
此方法在接受到WCF服務端返回的資料之後, 轉換程String類型返回.
附加內容:
private static final String BASE_URL = "http://10.0.2.2:82/BlogCategoryService/";<br /> private static final String EXTENSION = "Json/";;<br /> private static final String TAG = "API";<br /> private static final String USER_AGENT = "Mozilla/4.5";</p><p> public JSONObject getObject(String sbj) throws JSONException, Exception {<br /> return new JSONObject(getRequest(BASE_URL + EXTENSION + sbj));<br /> }</p><p> public JSONArray getArray(String sbj) throws JSONException,<br /> Exception {<br /> return new JSONArray(getRequest(BASE_URL + EXTENSION + sbj));<br /> }</p><p> protected String getRequest(String url) throws Exception {<br /> return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));<br /> }<br />
請求資料之前封裝方法:
總結 : 此篇主要說明了Http請求的的兩個階段, 建立請求跟接受伺服器返回的資料, 在下篇再主要說明如何處理服務端返回的JSON資料,並把資料顯示在UI上面.
本章目的: 實現在Android用戶端請求我們上篇建立的WCF資料服務.
此部分分為 建立Http請求 跟 接受WCF 返回的資料.
一. 建立Http請求的方法
protected String getRequest(String url, DefaultHttpClient client)<br /> throws Exception {<br /> String result = null;<br /> int statusCode = 0;<br /> HttpGet getMethod = new HttpGet(url);<br /> Log.d(TAG, "do the getRequest,url=" + url + "");<br /> try {<br /> getMethod.setHeader("User-Agent", USER_AGENT);<br /> // HttpParams params = new HttpParams();</p><p> // 添加使用者密碼驗證資訊<br /> // client.getCredentialsProvider().setCredentials(<br /> // new AuthScope(null, -1),<br /> // new UsernamePasswordCredentials(mUsername, mPassword));</p><p> HttpResponse httpResponse = client.execute(getMethod);<br /> // statusCode == 200 正常<br /> statusCode = httpResponse.getStatusLine().getStatusCode();<br /> Log.d(TAG, "statuscode = " + statusCode);<br /> // 處理返回的httpResponse資訊<br /> result = retrieveInputStream(httpResponse.getEntity());<br /> } catch (Exception e) {<br /> Log.e(TAG, e.getMessage());<br /> throw new Exception(e);<br /> } finally {<br /> getMethod.abort();<br /> }<br /> return result;<br /> }<br />
參數URL: 我們要請求的地址
Client: 這個可以直接用new DefaultHttpClient(new BasicHttpParams()) 來初始化.
這個方法中需要注意RetrieveInputStream方法, 這個是當Http請求完成之後, 用來處理伺服器返回資料的方法,
二. 接受從WCF端傳回的資料
protected String retrieveInputStream(HttpEntity httpEntity) {<br /> int length = (int) httpEntity.getContentLength();<br /> if (length < 0)<br /> length = 10000;<br /> StringBuffer stringBuffer = new StringBuffer(length);<br /> try {<br /> InputStreamReader inputStreamReader = new InputStreamReader(<br /> httpEntity.getContent(), HTTP.UTF_8);<br /> char buffer[] = new char[length];<br /> int count;<br /> while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {<br /> stringBuffer.append(buffer, 0, count);<br /> }<br /> } catch (UnsupportedEncodingException e) {<br /> Log.e(TAG, e.getMessage());<br /> } catch (IllegalStateException e) {<br /> Log.e(TAG, e.getMessage());<br /> } catch (IOException e) {<br /> Log.e(TAG, e.getMessage());<br /> }<br /> return stringBuffer.toString();<br /> }<br />
此方法在接受到WCF服務端返回的資料之後, 轉換程String類型返回.
附加內容:
private static final String BASE_URL = "http://10.0.2.2:82/BlogCategoryService/";<br /> private static final String EXTENSION = "Json/";;<br /> private static final String TAG = "API";<br /> private static final String USER_AGENT = "Mozilla/4.5";</p><p> public JSONObject getObject(String sbj) throws JSONException, Exception {<br /> return new JSONObject(getRequest(BASE_URL + EXTENSION + sbj));<br /> }</p><p> public JSONArray getArray(String sbj) throws JSONException,<br /> Exception {<br /> return new JSONArray(getRequest(BASE_URL + EXTENSION + sbj));<br /> }</p><p> protected String getRequest(String url) throws Exception {<br /> return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));<br /> }<br />
請求資料之前封裝方法:
總結 : 此篇主要說明了Http請求的的兩個階段, 建立請求跟接受伺服器返回的資料, 在下篇再主要說明如何處理服務端返回的JSON資料,並把資料顯示在UI上面.