在本篇文章中,我们重要介绍服务器接口的内容,自我感觉有个不错的建议和大家分享下
在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 }
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 }
图2 使用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 }
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 }
文章结束给大家分享下程序员的一些笑话语录: 自行车
一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。
服务器和接口
---------------------------------