网络连接之——HttpClient(doGet和doPost)
来源:互联网 发布:北方医疗大数据 编辑:程序博客网 时间:2024/04/30 10:49
1.概述:
我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据。当然有时也用URLConnection。
Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。
但在android6.0之后,HttpClient被完全抛弃。如果要继续使用需要Apache HttpClient,需要在eclipse下libs里添加org.apache.http.legacy.jar,android studio里在相应的module下的build.gradle中加入:
android {
useLibrary ‘org.apache.http.legacy’
}
HttpClient和HttpURLConnection一样有doGet和doPost两种方式,这里仅介绍一下doGet方法,doPost方法仍旧和JAVA中学习的一样,如果忘记了可以看一下:doGet和doPost
资料:
HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。从文档上看,HttpClient有三个已知的实现类分别是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,会发现有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能,但是既然开发的是Android应用程序,还是使用Android专有的实现类,一定有其优势。
从两个类包所有在位置就可以看出区别,AndroidHttpClient定义在android.net.http.AndroidHttpClient包下,属于Android原生的http访问,而DefaultHttpClient定义在org.apache.http.impl.client.DefaultHttpClient包下,属于对apche项目的支持。而AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
因为Android4.0之后对使用网络有特殊要求,已经无法再在主线程中访问网络了,必须使用多线程访问的模式
2.doGet方法:
这里使用一个范例来介绍一下doGet方法的使用:
范例:
功能:利用doGet方法去连接指定网络,并传输数据,服务器接收数据后,在其控制台打印。
思路:连接网络不能在主线程中进行,所以必须使用异步通信,这里我们使用AsyncTask的方式。
缺陷:由于每次点击按钮,都会开启一个线程去连接网络,这并不是我们想要的结果,所以下节博客,我们将会介绍一下谷歌提供的一些网络通信框架^^。
1)线程中连接服务器:
class MyAsyncTask extends AsyncTask<String, Integer, String>{//在线程中去连接网络 @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); Log.d("message", result); } @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub// HttpClientBuilder builder = HttpClientBuilder.create();// builder.setConnectionTimeToLive(3000, TimeUnit.MICROSECONDS);//? //2.生成client HttpClient client = new DefaultHttpClient();//可以直接用DefaultHttpClient来创建client //3.设置为get方法 String url = "http://192.168.0.74:8080/myServer/Myserverlet?name=zhangsan"; HttpGet get = new HttpGet(url); Log.d("message", url); //4.设置服务器接收后数据的读取方式为utf-8 get.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); try { //5.执行get方法得到服务器的返回的所有的数据,都存到response中。 HttpResponse response = client.execute(get); //6.httpclient 访问服务器返回的表头,包含http状态码 StatusLine statusLine = response.getStatusLine(); //7.得到状态码 int code = statusLine.getStatusCode(); if(code==HttpURLConnection.HTTP_OK){//如果连接成功 //8.获得数据实体 HttpEntity entity = response.getEntity(); //9.获得输入流 InputStream is = entity.getContent(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); while(line != null){ System.out.println(line); line=br.readLine(); } } } catch (ClientProtocolException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return "连接成功!"; } }
解析:
这里使用DefaultHttpClient创建client实例
HttpClient client = new DefaultHttpClient();
或者使用:
HttpClientBuilder builder = HttpClientBuilder.create().build();
2)开启线程。
MyAsyncTask mytask = new MyAsyncTask ();mytask.excute();
- 网络连接之——HttpClient(doGet和doPost)
- HttpClient 连接网络的两种方法doGet和doPost
- Servlet之二 —— HttpServlet的doGet()和doPost()
- Java学习之路0813(HttpClient中的doGet和doPost实例)
- HttpUrlConnection和HttpClient的使用(doGet( )、doPost( )方法)
- httpclient的dopost和doget请求
- 第三十七天 HTTPClient(doget、dopost)
- Java web之doPost()和doGet()
- doGet和doPost的区别(servlet)
- doGet和doPost的区别(servlet)
- 浅谈doGet和doPost
- doGet 和 doPost区别
- android doGet和doPost
- day0812-doGet和doPost
- DoGet和DoPost
- doPost()和doGet()
- doGet和doPost
- doGet和doPost乱码
- 黑马程序员——学习日记6
- 斯坦福Developing iOS 8 Apps学习笔记(五)
- 【硬件测试】华为2016校招·电路设计领域机考试题
- LeetCode_pascals-triangle
- 使用apktool + idea 调试smali
- 网络连接之——HttpClient(doGet和doPost)
- 解决Eclipse导入Android工程出错
- 给我半个小时记录一下最近
- 数据结构 前言
- C++基础---面向对象建模方法
- 2015.9.13
- 操作系统内核Hack:(一)实验环境搭建
- 彩票系统 35选7
- SQlite的数据库查询