在利用HttpClient&&&HttpUrlConnection大体上分为8个步骤
1)HttpClient (apache开发) 2)HttpURLConnection(google在发布安卓时在Java基础上修改得到的) 使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本步骤: 0. 申请权限 INTERNET访问权限 1. 任何网络访问的相关代码,必须在工作线程中执行! 2. 创建HC/UC对象 3. 声明发起网络访问的方式(GET/POST) 4. 进行网络连接 5. 获得服务器响应的结果 6. 解析结果,提取需要的内容 7. 解析结果要提交到UI线程进行呈现 ======================================================================== 下面就对这两种访问服务器进行一个分析 A)利用AsyncTask采用HttpClient来于服务器就行交互。 0)申请权限---》在清单文件中---》Internet 1)起一个工作线程 new AsyncTask<Void,Void,___>(){ 重写 doInbackGround(Void... params){ try{ 2)创建HC HttpClient client=new DefaultHttpClient(); 3)声明发起网络访问方式(POST/GET) HttpPost post=new HttpPost("Schema+Host+Port+Path"); 或者是 HttpGet get=new HttpGet("Schema+Host+Port+Path"); 3.1)设置头参数 post(或者set).setHeader("Content-Type","application/x-www-from-urlencoded");note:这个参数是固定的 note:如果在利用服务器传来的验证码来进行 (只能是post)post.setHeader("Cookie",(sessionID)) --->sessionID是个自定义的变量3.2)设置body(entity)———》如果需要向服务器传值 (2)List<NameValuePair> paramerters =new ArrayList<NameValuePair>(); (3)parameters.add(new BasicNameValuePair(K,V)); (1)HttpEntity entity =new UrlEncodeFromEntity(parameters); 3.3)将赋完值的entity添加到访问流中 post.setEntity(entity); 4)进行网络连接: client.execute(post);或者是get 5)获得服务器响应 HttpResponse resp=client.execute(post); NOTE:4)5)是在一起处理的。 6)解析结果,提取需要内容: (0)HttpEntity respEntity =resp.getEntity(); (1)在HttpClient模式访问是,有变量方式获得(返回流中数据只为为String)String result=EntityUtil.toString(respEntity); (2)NOTE:如果涉及到验证码问题需要在获得响应结果5)处对头进行处理 Header header=resp.getFirstHeader("Set-Cookie"); String value=header.getValue.splite(";")[0]; (3)如果返回流中代表的数据为bitmap等 (0)+3.1)IntputStream is=respentity.getContent(); Bitmap bitamp=BitmapFactory.getContent(); note:这种例子只是针对于流中的数据bitmap类型,其他形式类似 3.2)关闭高级流 7)解析结果提交到UI线程 onPostExeute(_______ result){ listener.on____Finish(); }
校验等操作还需要在头参数中添加
}
}
}.excute();