android上网 2,使用HttpClient传输
博客专区 > chuiyuan 的博客 > 博客详情
android上网 2,使用HttpClient传输
chuiyuan 发表于4年前
android上网 2,使用HttpClient传输
  • 发表于 4年前
  • 阅读 241
  • 收藏 2
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: android为我们提供 了Apache的HttpClient以简化 操作。它将GET 封装成了 HttpGet,将POST方法封装成了 HttpPost。 最后不要忘记加上: <uses-permission android:name="android.permission.INTERNET" />

一 。使用HttpClient 进行GET连接

  1. 新建 URI

  2. 新GET  请求

  3. 新建 HTTP 客户端

  4. 使用客户端执行操作

  5. 返回处理的结果 

1. URI,这里的URI并不是URI类,而是String类型的uri字符。

String uri = "http://";

2.  新建 GET 请求

只要用HttpGet类就可以了

HttpGet.HttpGet (String uri );

3. 新建 Http 客户端

一般使用默认的就可以了

 DefaultHttpClient.DefaultHttpClient ()

4. 使用客户端执行请求

  HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

这个 方法返回的是HttpResponse类型,也就是响应、。

5. 处理响应

得到了HttpResponse后,在网格上的就完成 了,现在在本地进行响应处理。

HttpResponse.getStatusLine () ;//得到状态行
HttpResponse.getEntity () ;// 得到结果

例子:

protected void doGet() {
		// TODO Auto-generated method stub
		//新建 URL
		String url="http://5billion.com.cn/post.php?name=abcd";
		//新建 GET 请求
		HttpGet httpRequest = new HttpGet (url );
		//新建 http客户端
		HttpClient httpClient = new DefaultHttpClient ();
		//执行请求返回结果 
		try {
			HttpResponse httpResponse = httpClient.execute(httpRequest);
			//判断结果 
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				//得到结果 的类型
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}else {
				textView.setText("应答错误  :"+httpResponse.getStatusLine().toString());
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}



二。使用HttpCLient进行POST连接

    使用POST连接与GET连接不同的地方参数 的传递。在POST中,参数 的传递用 NameValuePair 类,实质也就是HashMap。

     POST与GET不同的地方 在于请求的建立

1 。新建 HttpPost请求

HttpPost.HttpPost( String uri );

2.  新建 保存参数的数据 结构 

在POST中传递的是NameValuePair类,仅仅保存一个肯定是不够的,所以真正传递的是一个列表,表中每一个对象 都是一个NameValuePair。如下

新建 一个列表 来保存NameValuePair。

 List<NameValuePair> params = new ArrayList <NameValuePair >();
 //新建真正 的数据 ,以名值 对的形式保存
 BasicNameValuePair.BasicNameValuePair (String name ,String value );
 //将名值 对加入 到列表 中
 List.add(NameValuePair  object);

3. 为参数 设置编码 方式 

最后将之前 新建 好的List对象 加入 到HttpPost对象 中

UrlEncodedFormEntity.UrlEncodedFormEntity (List <?extends NameValuePair>parameters ,String encoding )throws UnsupportedEncodingException

第一个参数 是要编码 的参数 ,第二个是设置编码 的方式 ,可以使用HTTP.UTF_8,  HTTP,UTF_16


4. 将参数 加入 到请求中

HttpEntityEnclosingRequestBase.setEntity (HttpEntity entity );

接下来的工作就一样了

5.新建 http客户端

DefaultHttpClient.DefaultHttpClient ()

6. 使用客户端执行操作

HttpClient.execute (HttpUriRequest request ) throws IOException ,ClientProtocolException

7 处理响应

这里的处理要按应用的要求 来处理,如将结果以String 显示 

String result - ENtityUtils.toString (httpReqsponse.getEntity());
tv.setText (result );

例子

protected void doPost() {
		// TODO Auto-generated method stub
		//新建 一个URL
		String url ="http://www.baidu.com";
		//新建 POST类请求
		HttpPost httpRequest = new HttpPost(url );
		//新建 要传递的数据结构 
		List <NameValuePair>params = new ArrayList <NameValuePair >();
		//新建 键值对
		BasicNameValuePair pair1 = new BasicNameValuePair ("param","AaBbCcDdEe");
		//将数据 加入 到键值 对中
		params.add(pair1);
		
		try {
			//设置编码 方式 
			HttpEntity entity = new UrlEncodedFormEntity (params ,HTTP.UTF_8);
			httpRequest.setEntity(entity);
			//新建 http客户端
			HttpClient httpClient = new DefaultHttpClient ();
			//执行请求,得到响应
			HttpResponse httpResponse = httpClient .execute(httpRequest );
			//判断响应状态 是否成功
			if (httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
				String result = EntityUtils.toString(httpResponse.getEntity());
				textView.setText(result);
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}


共有 人打赏支持
粉丝 10
博文 91
码字总数 40993
×
chuiyuan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: