自己整理,整理得不好,不喜勿喷!
HTTP通信
HttpURLConnection接口
HTTP超文本传输协议,用于传送WWW方式的数据。HTTP协议采用了请求/响应模式。
Android提供了HTTPURLConnection和HttpClient接口来开发HTTP程序。
HTTP使用最多的就是Get和Post,Get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给服务器。HttpUrlConnection是抽象类,
无法直接实例化对象,所以只能够通过URL的openConnection方法获得。
URL url = new URL(“http://www.google.com/”);
HttpURLConnection urlconn = (HttpURlConnection)url.openConneciton();
openConnection只是创建了实例但并没真正的连接操作。
//设置输入(输出)流
urlconn.setDoOutput(true);
urlconn.setDoInput(true);
//设置方式POST
urlconn.setRequestMethod(“POST”);
//POST请求不能使用缓存
urlconn.setUseCaches(false);
//完成连接之后要关闭这个连接
urlconn.disconnect;一般代码
String httpUrl = “http://www.baidu.com”;
String resultData = null;
URL url = null;
try
{url = new URL(http);
}
catch(MalformedException)
{}
If(url!=null)
{Try{ //使用HTTPURLConnetion打开连接HttpURLConnetion urlConn = (HttpURLConnetion)url.openConnetion();//得到读取的类容InputStreamReader in = new InputStreamReader(urlconn.getInputStream());BufferReader buffer = new BufferReader(in);String inputLine = null;While((inputLine = buffer.readLine())!=null){resultData += inputLine;}//关闭InputStreamReader
        In.close();//关闭http连接
        Urlconn.disconnect();}
}
用Get方式传递参数很简单,只需加上传递的参数即可。
String httpurl1 = “http://www.baidu.com?par=abcdefg”;
?par=abcdefg为传递的参数par由于HttpURLConnection默认使用Get方式,如果我们要像使用Post方式,则只需要setRequestMethod设置主要代码:
//设置POST请求方式
urlconn.setRequestMethod(“POST”);HttpClient接口
HttpClient更适合Android上开发互联网应用。
ClientConnectionManager接口
ClientConnectionManager是客户端连接管理器接口,主要有以下几个抽象方法。
closeIdleConnections 关闭空闲的连接
releaseConnection 释放一个连接
requestConnection 请求一个新的连接
shutdown 关闭管理器并释放DefaultHttpClient
DefaultHttpClient是默认的一个Http客户端,我们可以使用它创建一个Http连接
代码:
HttpClient httpclient = new DefaultHttpClient();HttpResponse
HttpRespone是一个Http连接响应,当执行一个HTTP连接后,就会 返回一个HttpResponse,可以通过HttpResponse获得一些响应的信息。
请求一个Http连接并获得该请求是否成功的代码:
HttpResponse httpResponse = httpClient.execute(httpRequest());
If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
{//连接成功
}
HttpClient中如何使用Get方式获取数据。这里需要使用HttpGet来构建一个Get方式的Http请求,
然后通过HttpClient来执行这个请求,HttpResponse在接收这个请求后给出响应,最后通过“HttpResponse.getStatusLine().getStatusCode()”
来判断请求是否成功并处理。
主要代码:
//http地址
String httpUrl = “http://192.168.0.1:8080/http1.jsp?par=Http Client_android_Get”;
//HttpGet连接对象
HttpGet httpRequest = new HttpGet(httpUrl);
try
{//获取HttpCilent对象HttpClient httpClient = new DefaultHttpClient();//请求HttpClient,取得HttpReponseHttpResponse httpResponse = httpCilent.execute(httpRequest);//判断请求If(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){String strResult = EntityUtil.toString(httpResponse.getEntity());}
}
catch(ClientProtocolException)
{
}
catch(IOException)
{
}用POST方式与Get方式不一样
需要使用NameValuePair来保存传递的数据的参数,这里可以使用BasicNameValuePair来构造要被传递的参数,然后通过add方法添加到这个参数到NameValuePair中
代码:
//使用NameValuePair来保存要传递的Post参数
List params = new ArrayList();
//添加要传递的参数
Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”));
Post方式需要设置所使用的字符集,最后就和Get方式一样通过HttpClient来请求这个连接,返回响应并处理。关键代码:
//HttpPost连接对象
HttpPost httpRequest = new HttpPost(httpUrl);
List params = new ArrayList();
//添加要传递的参数
Params.add(new BasicNamePair(“par”,”HttpClient_android_Post”));
try
{//设置字符集HttpEntity httpentity = new UrlEncodedFormEntity(params,”gb2312”);//请求httpRequest
    httpRequest.setEntity(httpentity);//…………..和Get操作一样
}实时更新:
实时更新需要通过一个线程来控制是视图的更新。
例:实现android程序中每隔5秒刷新一次视图。
public class Test_GetOnTimeActivity extends Activity
{TextView tv ;Button btn;MyHandler myHandler;MyThread myThread;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv = (TextView)findViewById(R.id.textView1);btn = (Button)findViewById(R.id.button1);btn.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {refresh();}});myHandler = new MyHandler();myThread = new MyThread();new Thread(myThread).start();}//刷新网页更新private void refresh(){String httpUrl = "http://www.sina.com.cn/";String resultData = null;URL url = null;try{url = new URL(httpUrl);}catch(MalformedURLException e){e.printStackTrace();}if(url!=null){try{HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();InputStreamReader in = new InputStreamReader(urlConn.getInputStream());BufferedReader buffer = new BufferedReader(in);String inputLine = null;while((inputLine = buffer.readLine())!=null){resultData += inputLine+"\n";}in.close();urlConn.disconnect();}catch(IOException e){e.printStackTrace();}if(resultData!=null){tv.setText(resultData);}else{tv.setText("No data");}}}class MyThread implements Runnable{@Overridepublic void run() {while(true){try{Thread.sleep(5*1000);myHandler.sendMessage(myHandler.obtainMessage());}catch(InterruptedException e){e.printStackTrace();}}}}class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);refresh();}public MyHandler() {super();}}
}

http://blog.sina.com.cn/s/blog_6e13876401013hpm.html  转

转载于:https://www.cnblogs.com/622698abc/archive/2012/11/12/2767110.html

Android中的HTTP通信相关推荐

  1. 一起Talk Android吧(第四百九十四回:在Android中使用MQTT通信四)

    文章目录 问题概述 解决办法 经验总结 各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信四",本章回内容与前后章节内容无关联.闲话休提,言归正转,让我 ...

  2. 安卓app与服务器通信协议,Android中的HTTP通信-总结

    出处:Android中的HTTP通信 等级:初级 参考:HTTP权威指南 一.HTTP基础 1. 名词解释 Http协议(超文本传输协议),定义了客户端向服务器请求协议,例如:请求文本,图片,音频,视 ...

  3. Android中的蓝牙通信

    一.蓝牙简介 现有的蓝牙主要分为两类: 经典蓝牙:3.0版本以下的蓝牙,都称为"经典蓝牙",功耗高.传输数据量大.传输距离只有10米. 低功耗蓝牙:4.0及以上版本的蓝牙就是低功耗 ...

  4. Android中关于Socket通信数据大小,内存缓冲区和数据可靠性的一点调查

    关于TCP和UDP Socket通信的区别: 应用场景: UDP传输协议效率高,但不可靠: TCP传输效率低,但可靠. 传输数据大小: UDP传输数据限定在64K以下: TCP传输数据无大小限制,可进 ...

  5. 从源码角度分析Android中的Binder机制的前因后果

    为什么在Android中使用binder通信机制? 众所周知linux中的进程通信有很多种方式,比如说管道.消息队列.socket机制等.socket我们再熟悉不过了,然而其作为一款通用的接口,通信开 ...

  6. 问题:解决Android中socket自动断开连接

    在strain sensor APP开发过程当中,需要客户端不断地读取从蓝牙模块发送过来的数据. 遇到的问题: 连接上蓝牙模块后,能够正常读数,蓝牙数据发送速率为0.03s每个.大概在发送了342个数 ...

  7. 从Android中Activity之间的通信说开来

    引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...

  8. Android中的跨进程通信方法实例及特点分析(二):ContentProvider

    1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...

  9. Android中通过Socket直接与RILD进行通信

    点击打开链接 1 RIL_J与RIL_C通信 上层通常要和RILD通信,是通过Socket,在RIL_JAVA层实现: 沿着这样代码流程进行Framework--native: Phone--RIL_ ...

最新文章

  1. Python 将两层列表展开平铺成一层
  2. 岗位推荐 | 微软AI Research Group招聘自然语言处理AI算法研究实习生
  3. boost::hana::product用法的测试程序
  4. LeetCode 1625. 执行操作后字典序最小的字符串(BFS)
  5. Kudu : 三种Fulsh Mode
  6. String对象不可改变的特性
  7. 浏览器处理 前台传递的+时出现问题
  8. C语言之结构体 共用体 枚举 typedef
  9. 数据库异常用户sa登录失败_轻松解决SQLserver2014出现“用户sa登录失败 错误18456”的问题-网络教程与技术 -亦是美网络...
  10. 信号理论: 信号集及其映射
  11. CTF-WEB小技俩 ——合天网安实验室学习笔记
  12. 机器学习常见模型英文介绍
  13. 对List的数据进行分组
  14. 学习编程需要了解什么基础知识
  15. JAVA设计模式-06-建造者模式
  16. 尚硅谷Java、HTML5前端、全栈式开发视频
  17. yolo3.cfg相关配置
  18. 计算机网络 谢希仁 第八版 学习笔记
  19. CSS设置 background-image透明度小技巧
  20. FFMPEG 将IPCamera的RTSP视频流传送至RED5服务器 小白教程

热门文章

  1. 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
  2. Redis数据库设置密码
  3. 读取CSV文件内容,将其转换成JSON字符串输出
  4. bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...
  5. Swift iOS : 字体图标
  6. yii1框架,事务使用方法
  7. Properties类读写配置文件
  8. 《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录
  9. 中国科协(深圳)海外人才离岸创新创业基地源创力中心开业,主打国际创业服务...
  10. Fragment提交transaction导致state loss异常