Android之Web通信的使用

一、了解Android网络基础

  1、Android平台有三种网络接口可以使用

    a、标准Java接口 java.net.* 

    b、Apache接口 org.apache.*(开源项目HttpClient)

    c、Android网络接口 android.net.* 

二、掌握Android应用的HTTP通信

  1、HTTP:超文本传输协议(Hyper Text Transfer Protocol)

  2、采用请求/响应模式

  3、Android提供了HttpURLConnection和HttpClient接口

三、HttpURLConnection接口

  1、HttpURLConnection是Java的标准类,继承自URLConnection类。他们都是抽象类无法实例化对象。

  a、主要是通过URL的openConnection方法获得创建连接,代码如下:

URL ur l= new URL(“http://www.google.com”); 
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();

 

  b、默认使用Get方式,这需要通过url传递参数即可

URL url=new URL("http:www.google.com?parameter=bruce");
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();

  c、使用Post方式,则需要setRequestMethod设置

// 设置以POST方式
urlConn.setRequestMethod("POST");

//设置连接超时时间,单位:毫秒
urlConn.setConnectTimeout(10*1000);
//设置读取超时时间,单位:毫秒
urlConn.setReadTimeout(15*1000);
//设置是否允许接收服务器端响应内容,默认true
urlConn.setDoInput(true);
//设置是否允许构建一个输出流向服务器传递数据,默认false
urlConn.setDoOutput(true);
//设置是否使用缓存,POST不能使用缓存
urlConn.useCache(false);
//建立连接
urlConn.connect();

  d、获取网络图片,只需要将得到的数据流转换成bitmap就可以了

//创建HttpURLConnection
HttpURLConnection conn=(HttpURLConnection)iamgeUrl.openConnection();
//设置是否允许接收服务器端响应内容(默认为true) conn.setDoInput(
true);
//建立连接 conn.connect();
//构建输入流 InputStream stream
=conn.getInputStream();
//将数据流转换成Bitmap bitmap
=BitmapFactory.decodeStream(stream);
//关闭流 is.close();

 四、HttpClient

        一、Apache提供的HttpClient也适合我们在Android上开发互联网应用

    1、ClientConnectionManager接口

      a、客户端连接管理的接口

    2、DefaultHttpClient

      a、默认的HTTP客户端,可以使用创建HTTP连接

    3、HttpResponse

      a、一个Http连接响应,通过它可以得到返回的响应消息

  二、实现步骤

    1、使用HttpClient需要以下五个步骤;

      a、使用DefaultHttpClient实例化HttpClient对象。

      b、创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。

      c、调用execute方法发送HTTP GET或HTTP POST请求,并返回HttpResponse对象。

      d、通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。

      e、释放连接。无论执行方法是否成功,都必须释放连接。  

    2、使用Get方式提交请求

//HttpGet连接对象
HttpGet httpRequest = new HttpGet(httpUrl);
//取得HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
//请求HttpClient,取得HttpResponse
HttpResponse httpResponse = httpclient.execute(httpRequest);

    3、根据响应的代码判断请求是否成功

//请求成功
if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){

}

    4、代码(GET)

//构建HttpClient的实例
DefaultHttpClient httpClient=new DefaultHttpClient();
//创建Get实例
HttpGet get=new HttpGet("http://www.baidu.com");
try{
    //发送请求并得到响应结果
    HttpResponse res=httpClient.execute(get);
    //处理响应结果数据
    if(res != null && res.getStatusLine().getStatusCode() == HttpStaatus.SC_OK){
          System.out.println(EntityUtils.toString(res.getEmtity()));
    } 
}catch(Exception ex){
      ex.printStackTrace();      
}finally{
      //释放资源
      httpClient.getConnectionManager().shutdown();
}    

    5、使用Post方式提交请求

//HttpPost连接对象
HttpPost HTTPRequest=new HttpPost(httpUrl);

    6、使用NameValuePair来保存要传递的参数

//使用NameValuePair来保存要传递的Post参数
List<NameValuePair>params=new ArrayList<NameValuePair>();
//添加要传递的参数
params.add(new BasicNameValuePair("pair","HttpClient_android_Post"));

    7、同样是通过HTTP客户端提交请求

//设置字符集
HTTPEntity httpentity=new UrlEncodedFormEntity(params,"utf-8");
//请求httpRequest
HttpRequest.setEntity(httpentity);

//取得默认的HttpClient
HttpClient httpclient=new DefaultHttpClient();
//提交请求
httpclient.execute(httpRequest);

    8、代码POST

//构建HttpClient实例
DefaultHttpClient httpClient = new DefaultHttpClient();
//创建Post实例
HttpPost post = new HttpPost("http://www.baidu.com")
//初始化请求参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("stuNo","123456"));
params.add(new BasicNameValuePair("stuName","zhangsan"));
params.add(new BasicNameValuePair("stuSex","男"));
params.add(new BasicNameValuePair("stuTemp","1997-1-1"));
params.add(new BasicNameValuePair("stuAddress","zhuhai"));
try{
     //设置请求参数,并以UTF-8方式编码
     post.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
     //发送请求并得到响应结果
     HttpResponse res=httpClient.execute(post);
     //处理响应结果数据
     if(res != null && res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
           System.out.println(EntityUtils.toString(res.getEntity()));  
     }
}catch(Exception ex){
      ex.printStackTrace();  
}finally{
      //释放资源
      httpClient.getConnectionManager().shutdown();
}

    9、实时更新可以在客户端通过线程不听的请求并刷新页面

    10、不能直接在线程中更新UI,需要使用Handler来实现,代码如下:

Handler mHandler=new Handler(){
  public void handleMessage(Message msg){
      super.handleMessage(msg);
      //刷新
      refresh();  
  }  
}

 

 

转载于:https://www.cnblogs.com/zhangmawang/p/8109557.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值