Android访问WCF(下篇)-客户端开发
本章目的: 实现在Android客户端请求我们上篇建立的WCF数据服务.
此部分分为 建立Http请求 跟 接受WCF 返回的数据.
一. 建立Http请求的方法
- protected String getRequest(String url, DefaultHttpClient client)
- throws Exception {
- String result = null;
- int statusCode = 0;
- HttpGet getMethod = new HttpGet(url);
- Log.d(TAG, "do the getRequest,url=" + url + "");
- try {
- getMethod.setHeader("User-Agent", USER_AGENT);
- // HttpParams params = new HttpParams();
- // 添加用户密码验证信息
- // client.getCredentialsProvider().setCredentials(
- // new AuthScope(null, -1),
- // new UsernamePasswordCredentials(mUsername, mPassword));
- HttpResponse httpResponse = client.execute(getMethod);
- // statusCode == 200 正常
- statusCode = httpResponse.getStatusLine().getStatusCode();
- Log.d(TAG, "statuscode = " + statusCode);
- // 处理返回的httpResponse信息
- result = retrieveInputStream(httpResponse.getEntity());
- } catch (Exception e) {
- Log.e(TAG, e.getMessage());
- throw new Exception(e);
- } finally {
- getMethod.abort();
- }
- return result;
- }
参数URL: 我们要请求的地址
Client: 这个可以直接用new DefaultHttpClient(new BasicHttpParams()) 来初始化.
这个方法中需要注意RetrieveInputStream方法, 这个是当Http请求完成之后, 用来处理服务器返回数据的方法,
二. 接受从WCF端传回的数据
- protected String retrieveInputStream(HttpEntity httpEntity) {
- int length = (int) httpEntity.getContentLength();
- if (length < 0)
- length = 10000;
- StringBuffer stringBuffer = new StringBuffer(length);
- try {
- InputStreamReader inputStreamReader = new InputStreamReader(
- httpEntity.getContent(), HTTP.UTF_8);
- char buffer[] = new char[length];
- int count;
- while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {
- stringBuffer.append(buffer, 0, count);
- }
- } catch (UnsupportedEncodingException e) {
- Log.e(TAG, e.getMessage());
- } catch (IllegalStateException e) {
- Log.e(TAG, e.getMessage());
- } catch (IOException e) {
- Log.e(TAG, e.getMessage());
- }
- return stringBuffer.toString();
- }
此方法在接受到WCF服务端返回的数据之后, 转换程String类型返回.
附加内容:
- private static final String BASE_URL = "http://10.0.2.2:82/BlogCategoryService/";
- private static final String EXTENSION = "Json/";;
- private static final String TAG = "API";
- private static final String USER_AGENT = "Mozilla/4.5";
- public JSONObject getObject(String sbj) throws JSONException, Exception {
- return new JSONObject(getRequest(BASE_URL + EXTENSION + sbj));
- }
- public JSONArray getArray(String sbj) throws JSONException,
- Exception {
- return new JSONArray(getRequest(BASE_URL + EXTENSION + sbj));
- }
- protected String getRequest(String url) throws Exception {
- return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));
- }
请求数据之前封装方法:
总结 : 此篇主要说明了Http请求的的两个阶段, 建立请求跟接受服务器返回的数据, 在下篇再主要说明如何处理服务端返回的JSON数据,并把数据显示在UI上面.