代码改变世界

Android访问WCF(下篇)-客户端开发

2011-02-25 10:54  Vincent.C  阅读(7343)  评论(3编辑  收藏  举报

本章目的: 实现在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上面.