服务器接口Android学习笔记47:使用HttpClient接口实现网络通信

本文介绍了如何在Android应用中使用HttpClient接口进行网络操作,包括GET请求获取图片和POST请求提交数据的详细步骤及代码示例。

在本篇文章中,我们重要介绍服务器接口的内容,自我感觉有个不错的建议和大家分享下

     在Android中,我们可以通过使用标准的Java接口来完成Android应用程序的联网操纵。但是在现实开辟中,可能会需要用到更复杂的联网操纵,为此,Android平台供给了Apache HttpClient接口,为客户端的HTTP编程供给了高效、便捷、功能丰富的工具包支持。

     Android平台在引入Apache HttpClient的同时,还对其进行了一些封装和扩展,如设置缺省的HTTP超时和缓存巨细等。使用Apache HttpClient接口,我们可以创立HttpClient、HttpGet/HttpPost、HttpResponse等对象,设置连接参数,执行HTTP操纵,处理服务器返回结果等。

     本文将以两个实例演示在Android开辟中如何使用HttpClient接口完成客户端HTTP编程。其中,一个实例使用GET方法获取服务器上的图片进行显示;一个实例使用POST方法向服务器提交数据,完成登录功能。

     

    1.常用的接口和类

     在讲解实例之前,我们有须要先了解一下在HttpClient接口中,为我们供给了哪些常用的接口和类。

    1.1 ClientConnectionManager接口

     ClientConnectionManager是客户端连接管理器接口,用于对连接到服务器上的客户端进行管理,重要供给了以下6个抽象方法:

     (1)abstract void closeExpiredConnections();

     (2)abstract void closeIdleConnections(long idletime, TimeUnit tunit);

     (3)abstract SchemeRegistry getSchemeRegistry();

     (4)abstract void releaseConnection(ManagedClientConnection conn, long validDuration, TimeUnit timeUnit);

     (5)abstract ClientConnectionRequest requestConnection(HttpRoute route, Object state); 

     (6)abstract void shutdown();

     其中,closeExpiredConnections()方法用于关闭所有过期的连接;closeIdleConnections()方法用于关闭所有空闲的连接;getSchemeRegistry()方法用于取得注册方案;releaseConnection()方法用于释放连接;requestConnection()方法用于请求一个新的连接;shutdown()方法用于关闭管理器并释放资源。

    1.2 DefaultHttpClient

     DefaultHttpClient是HttpClient接口的一个直接子类,它是一个默许的HTTP客户端,平日我们可以使用它来创立一个HTTP连接。在HttpClient接口中供给了多个重载的execute()方法,用来执行HTTP请求。

    1.3 HttpRequest接口

     HttpGet和HttpPost都是HttpRequest接口的直接子类,分离用于向服务器提交GET请乞降POST请求。

    1.4 HttpResponse接口

     HttpResponse接口供给了HTTP的响应信息,其重要方法如图1所示。

    服务器和接口

    图1 HttpResponse接口供给的重要方法

     其中,getEntity()方法用于获取响应的消息实体;getStatusLine()方法用于获取响应的状态行,在返回结果StatusLine对象中包含了HTTP响应的状态码,可以使用方法getStatusCode()取得。

     

    2.使用GET方法获取服务器上的图片

     在该实例中,我们使用了在上一篇博文《Android学习条记46:使用Post方法提交数据》中搭建好的Web工程作为服务器,并在该工程中添加了一张名为“cat.jpg”的图片作为我们将要获取的对象。

     使用GET方法获取服务器上的图片,可以按照以下4个步调进行:

     (1)创立一个GET方法的HttpRequest请求对象。

     (2)创立一个默许的HTTP客户端,并执行该GET方法的HTTP请求。

     (3)取得服务器的响应码,据此判断服务器是否准确响应。

     (4)取得服务器的响应内容(InputStream),转换成Bitmap图片。

     以上4个步调的具体实现代码如下:

 1     /*
 2      * Function   :   发送GET请求
 3      * Author     :   博客园-依旧淡然
 4      */
 5     public static Bitmap sendGetResquest(String path) {
 6         Bitmap bitmap = null;
 7         HttpGet httpGet = new HttpGet(path);                           //创立一个GET方法的HttpRequest对象
 8         DefaultHttpClient httpClient = new DefaultHttpClient();        //创立一个默许的HTTP客户端
 9         try {
10             HttpResponse httpResponse = httpClient.execute(httpGet);               //执行GET方法的HTTP请求
11             int reponseCode = httpResponse.getStatusLine().getStatusCode();        //取得服务器的响应码
12             if(reponseCode == HttpStatus.SC_OK) {
13                 InputStream inputStream = httpResponse.getEntity().getContent();   //取得服务器的响应内容
14                 bitmap = BitmapFactory.decodeStream(inputStream);
15                 inputStream.close();
16             }
17         } catch (ClientProtocolException e) {
18             e.printStackTrace();
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22         return bitmap;
23     }
最后,我们在Activity中通过一个Button按钮来向服务器发送GET请求,并调用sendGetResquest()方法将失掉的Bitmap对象显示在ImageView控件中。具体的实现代码如下:
 1     /*
 2      * Function  :   点击事件响应
 3      * Author    :   博客园-依旧淡然
 4      */
 5     public void onClick(View view) {
 6         switch(view.getId()) {
 7         case R.id.button_get:
 8             String url = "http://192.168.1.101:8080/myhttp/cat.jpg";
 9             Bitmap bitmap = HttpUtils.sendGetResquest(url);
10             mImageView.setImageBitmap(bitmap);
11             break;
12         }
13     }
运行该工程,点击“提交GET请求”按钮后,可以看到如图2所示的显示界面,在“提交GET请求”按钮的下面所显示的图片正是我们从服务器上失掉的图片。

    服务器和接口

    每日一道理
岭上娇艳的鲜花,怎敌她美丽的容颜?山间清澈的小溪,怎比她纯洁的心灵?

    使用GET方法获取服务器上的图片

 

    3.使用POST方法向服务器提交数据

     在该实例中,我们一样使用了在上一篇博文《Android学习条记46:使用Post方法提交数据》中搭建好的Web工程作为服务器。运行Tomcat,在浏览器中拜访该Web工程,可以看到如图3所示的界面。 

    服务器和接口

    图3 Web工程的显示页面

     该实例要做的就是,使用POST方法向服务器提交用户名和密码,模拟登录进程,并取得服务器的验证信息,显示登录是否胜利。

     使用POST方法向服务器提交数据,比GET方法要略微复杂点,具体可以按照以下5个步调进行:

     (1)对请求体参数(也就是username和password)进行封装。

     (2)创立一个POST方法的HttpRequest对象,并设置POST方法的请求体。

     (3)创立一个默许的HTTP客户端,并执行该POST方法的HTTP请求。

     (4)取得服务器的响应码,据此判断服务器是否准确响应。

     (5)取得服务器的响应内容(InputStream),转换成String字符串进行显示。

     以上5个步调的具体实现代码如下:

 1     /*
 2      * Function  :   发送POST请求
 3      * Author    :   博客园-依旧淡然
 4      */
 5     public static String sendPostResquest(String path, Map<String, String> params, String encoding) {
 6         List<NameValuePair> list = new ArrayList<NameValuePair>();      //封装请求体参数
 7         if((params != null) && !params.isEmpty()) {
 8             for(Map.Entry<String, String> param : params.entrySet()) {
 9                 list.add(new BasicNameValuePair(param.getKey(), param.getValue()));
10             }
11         }
12         try {
13             UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, encoding);    //对请求体参数进行URL编码
14             HttpPost httpPost = new HttpPost(path);           //创立一个POST方法的HttpRequest对象
15             httpPost.setEntity(entity);                       //设置POST方法的请求体
16             DefaultHttpClient client = new DefaultHttpClient();
17             HttpResponse httpResponse = client.execute(httpPost);                      //执行POST请求
18             int reponseCode = httpResponse.getStatusLine().getStatusCode();            //取得服务器的响应码
19             if(reponseCode == HttpStatus.SC_OK) {
20                 String resultData = EntityUtils.toString(httpResponse.getEntity());    //取得服务器的响应内容
21                 return resultData;
22             }
23         } catch (IOException e) {
24             e.printStackTrace();
25         }
26         return "";
27     }
一样的,我们在Activity中通过一个Button按钮来向服务器发送POST请求,并调用sendPostResquest()方法将失掉的服务器响应结果显示在TextView控件中。具体的实现代码如下:
 1     /*
 2      * Function  :   点击事件响应
 3      * Author    :   博客园-依旧淡然
 4      */
 5     public void onClick(View view) {
 6         switch(view.getId()) {
 7         case R.id.button_submit:
 8             String username = mEditText_userName.getText().toString();
 9             String password = mEditText_password.getText().toString();
10             Map<String, String> params = new HashMap<String, String>();
11             params.put("username", username);
12             params.put("password", password);
13             String url = "http://192.168.1.101:8080/myhttp/servlet/LoginAction";
14             mTextView_result.setText(HttpUtils.sendPostResquest(url, params, "utf-8"));
15             break;
16         }
17     }
运行该工程,在EditText控件中分离输入用户名和密码,点击“提交数据”按钮后,可以看到如图4所示的显示界面,在“提交数据”按钮下面的TextView控件中可以看到服务器返回了“Login succeeded!” 的提示信息。

    服务器和接口

 

    

文章结束给大家分享下程序员的一些笑话语录: 自行车
一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

--------------------------------- 原创文章 By
服务器和接口
---------------------------------

同步定位与地图构建(SLAM)技术为移动机器人或自主载具在未知空间中的导航提供了核心支撑。借助该技术,机器人能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位与环境建模中的各类不确定性。 Matlab作为工程计算与数据可视化领域广泛应用的数学软件,具备丰富的内置函数与专用工具箱,尤其适用于算法开发与仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发与验证周期。 本次“SLAM-基于Matlab的同步定位与建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征提取、数据关联与地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器人导航与自主移动领域的研究人员提供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达与视觉传感器)的建立与应用、特征匹配与数据关联方法、滤波器设计(如扩展卡尔曼滤波与粒子滤波)、图优化框架(如GTSAM与Ceres Solver)以及路径规划与避障策略。通过项目实践,参与者可深入掌握SLAM算法的实现原理,并提升相关算法的设计与调试能力。 该项目同时注重理论向工程实践的转化,为机器人技术领域的学习者提供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化与可操作化,显著降低了学习门槛,提升了学习效率与质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器人、自动驾驶及无人机等领域的应用前景广阔。掌握该项技术不仅有助于提升个人专业能力,也为相关行业的技术发展提供了重要支撑。随着技术进步与应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器人技术领域的专业人员提供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参与者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值