Android中的HTTP通信
自己整理,整理得不好,不喜勿喷! 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通信相关推荐
- 一起Talk Android吧(第四百九十四回:在Android中使用MQTT通信四)
文章目录 问题概述 解决办法 经验总结 各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信四",本章回内容与前后章节内容无关联.闲话休提,言归正转,让我 ...
- 安卓app与服务器通信协议,Android中的HTTP通信-总结
出处:Android中的HTTP通信 等级:初级 参考:HTTP权威指南 一.HTTP基础 1. 名词解释 Http协议(超文本传输协议),定义了客户端向服务器请求协议,例如:请求文本,图片,音频,视 ...
- Android中的蓝牙通信
一.蓝牙简介 现有的蓝牙主要分为两类: 经典蓝牙:3.0版本以下的蓝牙,都称为"经典蓝牙",功耗高.传输数据量大.传输距离只有10米. 低功耗蓝牙:4.0及以上版本的蓝牙就是低功耗 ...
- Android中关于Socket通信数据大小,内存缓冲区和数据可靠性的一点调查
关于TCP和UDP Socket通信的区别: 应用场景: UDP传输协议效率高,但不可靠: TCP传输效率低,但可靠. 传输数据大小: UDP传输数据限定在64K以下: TCP传输数据无大小限制,可进 ...
- 从源码角度分析Android中的Binder机制的前因后果
为什么在Android中使用binder通信机制? 众所周知linux中的进程通信有很多种方式,比如说管道.消息队列.socket机制等.socket我们再熟悉不过了,然而其作为一款通用的接口,通信开 ...
- 问题:解决Android中socket自动断开连接
在strain sensor APP开发过程当中,需要客户端不断地读取从蓝牙模块发送过来的数据. 遇到的问题: 连接上蓝牙模块后,能够正常读数,蓝牙数据发送速率为0.03s每个.大概在发送了342个数 ...
- 从Android中Activity之间的通信说开来
引言 最近两个星期在研究android的应用开发,学习了android应用开发的基础知识,基本控件,基本布局,基本动画效果,数据存储,http访问internet等等基础知识. android中有一个 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据,Android系统给我们提供了Content P ...
- Android中通过Socket直接与RILD进行通信
点击打开链接 1 RIL_J与RIL_C通信 上层通常要和RILD通信,是通过Socket,在RIL_JAVA层实现: 沿着这样代码流程进行Framework--native: Phone--RIL_ ...
最新文章
- Python 将两层列表展开平铺成一层
- 岗位推荐 | 微软AI Research Group招聘自然语言处理AI算法研究实习生
- boost::hana::product用法的测试程序
- LeetCode 1625. 执行操作后字典序最小的字符串(BFS)
- Kudu : 三种Fulsh Mode
- String对象不可改变的特性
- 浏览器处理 前台传递的+时出现问题
- C语言之结构体 共用体 枚举 typedef
- 数据库异常用户sa登录失败_轻松解决SQLserver2014出现“用户sa登录失败 错误18456”的问题-网络教程与技术
-亦是美网络...
- 信号理论: 信号集及其映射
- CTF-WEB小技俩 ——合天网安实验室学习笔记
- 机器学习常见模型英文介绍
- 对List的数据进行分组
- 学习编程需要了解什么基础知识
- JAVA设计模式-06-建造者模式
- 尚硅谷Java、HTML5前端、全栈式开发视频
- yolo3.cfg相关配置
- 计算机网络 谢希仁 第八版 学习笔记
- CSS设置 background-image透明度小技巧
- FFMPEG 将IPCamera的RTSP视频流传送至RED5服务器 小白教程
热门文章
- 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
- Redis数据库设置密码
- 读取CSV文件内容,将其转换成JSON字符串输出
- bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...
- Swift iOS : 字体图标
- yii1框架,事务使用方法
- Properties类读写配置文件
- 《Cisco/H3C交换机配置与管理完全手册(第2版)》终稿封面和目录
- 中国科协(深圳)海外人才离岸创新创业基地源创力中心开业,主打国际创业服务...
- Fragment提交transaction导致state loss异常