文档章节

First Blood for Android之HttpClient网络编程

观望蓝
 观望蓝
发布于 2016/02/27 13:04
字数 712
阅读 6
收藏 0

重要知识点:
一、使用HttpClient步骤:
1.HttpClient是一个接口,一般情况下建立一个DefaultHttpClient的实例:
HttpClient httpClient=new DefaultHttpClient();
2.如果向服务器请求数据,则用建立HttpGet发起get请求:
HttpGet httpGet=new HttpGet(url);注:rul为String类型,内容是访问地址
3.再把httpGet对象传入httpClient的execute方法即可:
httpClient.execute(httpGet);

4.如果发起的post请求,则需要建立一个HttpPost的实例:
HttpPost httpPost=new HttpPost(url);
相应地,向服务器提交的数据,通常放入NameValuePair集合的实例中,再将它封装进UrlEncodeFormEntity中,然后调用httpPost.setEntity()方法:
List<NameValuePair>params =new ArrayList<NameValuePair();
通常地,会将Json转换为request参数
params.add(new BasicNameValuePair("request", params1.toString()));
UrlEncodedFormEntity urlEncodedFormEntity= new UrlEncodedFormEntity(params, HTTP.UTF_8);
httpPost.setEntity(urlEncodeFormEntity);

5.再将httpPost传入httpClient.execute()方法中:
HttpResponse httpResponse=httpClient.execute(httpPost)
通常地,当httpClient想服务器提交post后,则会返回一个HttpResponse实例,httpResponse对象中存储服务器返回的数据。

6.通过判断if(httpResponse.getStatusLine().getStatusCode()==200){
//请求和响应都成功了
HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity);参考资料(第一行代码)
}

二、访问网络的技巧:
1.网络访问经常需要用到。因此,可将访问网络的方法提取到工具类中,以便重用。
2.网络访问是耗时操作,因此需要开启子线程进行。另外如果开启子线程访问网络,并想要得到服务器返回的数据,定义一个监听的回调方法,将数据返回。

3.如果需要根据返回数据更新UI界面,则需要在回调方法中调用handler.sendMessage()通知UI线程更新界面,切忌在子线程更新会产生阻塞错误。

附:HttpUtil代码:
1.HttpUtil类

public class HttpUtil {
/**
 * <p>网络访问服务,向服务器请求登陆
 * @param address:请求地址;
 * @param HttpCallbackListener:网络访问监听引用;
 * @param account:账号
 * @param password:密码
 * */
 public static void  postHttpJson(final String address,final HttpCallbackListener listener,final String account,final String password){
  
  new Thread(new Runnable() {
   
   @Override
   public void run() {
    // TODO Auto-generated method stub
    try {
     HttpClient httpClient=new DefaultHttpClient();
     HttpPost httpPost=new HttpPost(address);
     JSONObject params1 = JsonBuilder.jsonData(account, password);    
     ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
     params.add(new BasicNameValuePair("request", params1.toString()));
     UrlEncodedFormEntity urlEncodedFormEntity= new UrlEncodedFormEntity(params, HTTP.UTF_8);

     
     Log.i("json", params1.toString());
     httpPost.setEntity(urlEncodedFormEntity);
     HttpResponse httpResponse=httpClient.execute(httpPost);
     if (httpResponse.getStatusLine().getStatusCode()==200) {
      HttpEntity entity=httpResponse.getEntity();
      String response=EntityUtils.toString(entity);
      
      if (listener!=null) {
       listener.onFinish(response);
       Log.i("response", response);
      }
          
     }
    } catch (UnsupportedEncodingException e) {
     
     e.printStackTrace();
    } catch (ClientProtocolException e) {
     if (listener!=null) {
      listener.onError(e);
     }
     
    } catch (JSONException e) {
     
     e.printStackTrace();
    } catch (IOException e) {
   
     e.printStackTrace();
    }
   
   }

   
  }).start();
 }
 
}

2.HttpCallbackListener:

//写了一个接口,定义回调约定:onFinish()、onError(),将HttpCallbackListener的对象引用以参数的方式传递到HttpUtil的静态方法postHttpJson()中,当用户发起网络访问请求调用postHttpJson()时,将会实现HttpCallbackListener接口的匿名内部类对象,调用接口定义的好回调方法。

public interface HttpCallbackListener {
 void onFinish(String response);
 void onError(Exception exception);
}

 

© 著作权归作者所有

共有 人打赏支持
观望蓝
粉丝 0
博文 3
码字总数 1122
作品 0
广州
私信 提问
HttpComponents Client for Android 4.3.5.1 发布

HttpComponents Client for Android 4.3.5.1 发布,此版本修复了大量关于 Android 对原始 HttpClient 4.3.5 代码作为基础的 Android 移植指定修改的 bug。 请注意,此版本的 HttpClient 禁用...

oschina
2015/01/20
2.9K
2
HttpClient和HttpURLConnection的区别

Android 提供两个HTTP客户端,分别是HttpURLConnection客户端和Apache的HttpClient,android的AndroidHttpClient是对HttpClient的实现。这两个HTTP客户端都支持HTTPS协议、流媒体的上传和下载...

Callen
2015/08/09
0
0
Android 浅谈HttpClient工具类

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的...

Jonson
2013/07/25
0
3
Android下的网络编程 & 代理的使用

1. 使用 标准Java接口: 设计的类: java.net.* 基本步骤: 1) 创建 URL 以及 URLConnection / HttpURLConnection 对象 2) 设置连接参数 3) 连接到服务器 4) 向服务器写数据 5)从服务器读取数据...

小编辑
2010/08/12
5.5K
2
[Android开发] 关于 HttpClient 的 execute() 方法的执行问题

你好,我的 开发环境: JDK: 1.8.0_05 Android 项目的版本是 Android 4.1.2 AVD 仿真器的 版本是 Android 4.1.2 eClipse 的版本是 Kepler Service Release 2 我的程序只是呼叫一个 html 档,也...

Arthur1977
2014/08/24
4.6K
5

没有更多内容

加载失败,请刷新页面

加载更多

Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
4
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
7
0
EOS错误代码及中文释义

本文集汇总了EOS区块链常见错误代码及其含义,完整错误代码集请查看 EOS错误代码集 - 汇智网 EOS错误代码列表如下, <table class="table table-striped"> <thead> <tr><th>错误代码</th><t......

汇智网教程
昨天
2
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
4
0
kiss原则

KISS 原则是用户体验的高层境界,简单地理解这句话,就是要把一个产品做得连白痴都会用,因而也被称为“懒人原则”。换句话说来,”简单就是美“。KISS 原则源于 David Mamet(大卫马梅)的电...

NB-One
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部