当前位置: 首页 > 编程日记 > 正文

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

相关文章:

ceph admin socket修改ceph配置文件

目前有两种动态修改的方式来让ceph中各个组件的配置生效,所以介绍如下两种方式方便我们进行功能或者代码的调试 使用ceph daemon方式修改 ceph daemon osd.0 help用于osd的daemon服务ceph daemon mon.ceph-node1 help用于mon的admin socket命令、ceph daemon osd.…

持续集成之戏说Check-in Dance

《infoq》 众所周知,敏捷软件开发方法中有多种最佳实践,既有管理方面的,也有技术方面的。在尝试敏捷之初,并不是每个团队都能使用全部最佳实践,也不是每个实践都能在短时间内见效。但其中有一种最佳实践却是团队的必选…

C语言的基础题目,几个c语言的基础题目

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼{day_number day_1 day_2 day_3 day_4 day_5 day;printf("%d年%d月%d日为这一年的第%d天!\n", year, month, day, day_number);}else{printf("输入的日不合法!\n");}break;case 7…

Exchange企业实战技巧(3)配置Exchange证书

Exchange2010需要证书支持,exchange2010安装之后会默认开启ssl,在IE中只能使用https://而不是http://来访问owa。如果没有证书,也能安装exchange2010,也能使用owa,但是会有告警出现。 要想消除警告信息&…

【转载】locust性能测试3

#codingutf-8 from locust import HttpLocust,TaskSet,task import queue import randomclass test_taskset(TaskSet):taskdef register(self):try:emailself.locust.emailqueue.get() #获取队列里的数据print(email)except queue.Empty: #队列取空后,直接退出p…

基于 WPF + Modern UI 的 公司OA小助手 开发总结

前言: 距离上一篇博客,整整一个月的时间了。人不能懒下来,必须有个阶段性的总结,算是对我这个阶段的一个反思。人只有在总结的过程中才会发现自己的不足。 公司每天都要在OA系统上上班点击签到,下班点击签退&#xff0…

pprof搭配ceph tell命令分析ceph内存

文章目录安装使用使用ceph tell产生堆栈信息文使用pprof工具分析内存及ceph tell释放内存火焰图FlameGraph可视化进程堆栈信息pprof是一个google开发的支持可视化、且可分析profile文件而达到对内存的分析。并且能够输出文本和图像来支持分析过程,pprof源码 安装 可以直接通过…

android jar 电子书下载,【Android】Gradle project sync jar包长时间下载不下来的解决办法...

当我们新建一个Android项目,或者在项目中依赖使用一个新的第三方库时,Android Studio经常会从jcenter或者maven仓库下载jar包,但是我们的网络环境不一定一直那么的顺畅,当网络环境不好,导致有时候jar包好长时间下载不下…

TextField输入结束后让键盘消失的两个技巧

一、点击Return键消失需要调用Did End On Exit事件。- (IBAction) doneEditing:(id) sender { [sender resignFirstResponder];} 当你输入结束后点击Return键,启动Did End On Exit事件。resignFirstResponder会撤消UITextField的第一响应状态。意味着你…

机器学习 决策树 ID3

构造决策树时需要解决的第一个问题是:当前数据集中哪个特征在划分数据分类时起决定性作用。 划分数据集的原则:将无序的数据变得更加有序 信息增益:在划分数据集前后信息发生的变化 获得信息增益最大的特征就是最好的特征 熵:信息…

centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数

文章目录Step 1:glibc-2.17 被libc.so.6库依赖,升级glibc库Step2:升级编译器-->4.8.2可以正常编译glibc2.17Step3:修改ELF,降低ceph-mon依赖的库函数版本解决ceph-mon调用高版本libc库(修改动态库链接表ELF)Step 1:glibc-2.17 …

如何创建一个基础jQuery插件

如何创建一个基础插件 How to Create a Basic Plugin 有时你想使一块功能性的代码在你代码的任何地方有效.比如,也许你想调用jQuery对象的一个方法,对该对象进行一系列的操作.可能你写了一个真正有用的实用函数,想它能够轻易的移植到其他项目.在这种情况下,你可能想写一个插件.…

rk3399在linux机上烧写img,烧写固件 — TB-96AI documentation

Window主机烧写固件1、安装Windows PC端USB驱动(首次烧写执行)。2、双击DriverAssitant_v4.5DriverInstall.exe打开安装程序,点击“驱动安装”按提示安装驱动即可,安装界面如下所示:3、Type-C线连接主机端的USB接口和RK3399Pro TB-96AI开发板的Type-C接口…

Eclipse,Mycclipse自动补全快捷键设置

为什么80%的码农都做不了架构师?>>> eclipse3.3及以后的版本中中把内容助手(content assist)的快捷键由 alt /改成了ctrl space,这又刚好跟我们操作系统的切换输入法的快捷键冲突,所以造成内容助手不能使用了,给写代…

php 无限极分类

无限极分类1&#xff1a; 1 public function judeg($id)2 {3 $rs Db::name(finance_class) -> field(parent_code) -> where(id,$id) -> select();4 $i 1;5 foreach($rs as $k > $v){6 if($v[parent_code] <> 0){7 $i $this -…

ceph-bluestore-tool基本使用

主要是在bluestore的实例上执行低级管理操作的使用程序,是ceph bluestore的管理工具 命令 help显示帮助信息fsck [--deep]对bluestore元数据进行一致性检查。如果指定了–deep,还要读取所有对象数据并验证校验和repair运行一致性检查 并修复我们可以发生的任何错误bluefs-expo…

Android基础是什么,Android基础概念

android {compileSdkVersion 23buildToolsVersion “23.0.1”defaultConfig {applicationId “com.example.checkyourtargetsdk"minSdkVersion 15targetSdkVersion 23versionCode 1versionName “1.0”}以上是Android工程里名称为app的module的build.gradle文件其中的内容…

HDOJ 1060 Leftmost Digit

Author Ignatius.L题目大意&#xff1a;1.第一行输入一个整数T代表接下来有T组测试数据。2.接下来的T行&#xff0c;每行输入一个整数&#xff08;1<N<1,000,000,000&#xff09;。3.输出结果为N^N&#xff08;N的N次方&#xff09;最左边的那一位数&#xff08;即最高位…

WPF-002 下拉列表的简单实现

最近在一个WPF项目中用到一个下拉列表&#xff0c;随着用户输入字符而进行显示&#xff0c;使用了绑定等知识&#xff0c;虽然实现比较简单&#xff0c;可是在性能上也是想了很多办法终于才勉强可以用&#xff0c;与大家分享下。 用于页面绑定的模型类&#xff1a; public clas…

洛谷:P3950 部落冲突

原题地址:https://www.luogu.org/problemnew/show/P3950 题目简述 给定一棵树&#xff0c;每次给定一个操作&#xff0c;有如下两种&#xff1a; 将某条边染黑 2.询问给定的u,v两点间是否有边被染黑思路 询问两点间是否有边被染黑只需要在求LCA时判一下就行。所以直接上树链剖分…

深入理解ceph-disk prepare 源码逻辑

文章目录CEPH-DISK代码逻辑DEF MAIN:DEF PARSE_ARGS:DEF Prepare.set_subparser(subparsers)def _prepare(self):PrepareBluestore的_prepare函数def prepare(self, *to_prepare_list):PrepareData类中的prepare函数def prepare_device(self, *to_prepare_list): #prepare_devi…

Deep Learning 学习随记(三)续 Softmax regression练习

上一篇讲的Softmax regression&#xff0c;当时时间不够&#xff0c;没把练习做完。这几天学车有点累&#xff0c;又特别想动动手自己写写matlab代码 所以等到了现在&#xff0c;这篇文章就当做上一篇的续吧。 回顾&#xff1a; 上一篇最后给出了softmax regression的代价函数和…

html画三个重叠的矩形,html5 实现两个矩形的叠加

Canvas Primer - Example: Drawing shadowswindow.addEventListener(load, function () {//得到canvas&#xff0c;并检测是否支持canvasvar elem document.getElementById(myCanvas);if (!elem || !elem.getContext) {return;}// 得到可以画图的上下文contextvar context el…

sqlplusw下登录sys账户

今天使用sqlplusw时&#xff0c;发现每次使用sys用户登录时总是报错&#xff0c;提示要以sysdba或者sysoper的身份登录&#xff0c;错误提示如下图所示&#xff1a;可是界面上没地方可以输入角色的地方呀&#xff0c;后经尝试发现&#xff0c;在口令输入框里首先输入密码&#…

mybatis =或这个=提示错误Tag name expecte问题解决

解决方案&#xff1a; 1、将<号或者>号进行转义 DATE_SUB(CURDATE(), INTERVAL 31 DAY) < DATE(created) 2、使用<![CDATA[ ]]>符号进行说明 <![CDATA[DATE_SUB(CURDATE(), INTERVAL 31 DAY) < DATE(created)]]> 附&#xff1a; 附录&#xff1a;常见…

s-sgdisk源码分析 “--set-alignment=value分区对齐参数”

文章目录边界对齐子命令使用源码分析sgdisk.cc main函数入口gptcl.cc DoOptions解析并执行具体命令函数gpt.cc CreatePartition创建分区函数&#xff0c;设置起始扇区对齐gpt.cc Align分区对齐函数&#xff0c;设置起始扇区对齐sgdisk命令是由 gdisk-0.8.6-4.el7.x86_64程序包安…

NuGet学习笔记(3) 搭建属于自己的NuGet服务器

文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库&#xff0c;接下来进行最重要的一步&#xff0c;从零开始搭建属于自己的NuGet服务器&#xff0c;诚然园子里及其…

计算机网络共享打不开,网络和共享中心打不开,共享无法访问没有权限

在Win7系统下如果别的计算机设置了共享&#xff0c;那么在本机设置网络发现后就可以打开网络搜索到共享计算机和共享文件了&#xff0c;不过一些朋友反馈win7系统网络发现无法启用的问题&#xff0c;下面小编整理了解决方法&#xff0c;大家可以参考一下哦。解决方法如下&#…

千万不要把 bool 当成函数参数

我们有很多 Coding Style 或 代码规范。 但这一条可能会经常被我们所遗忘&#xff0c;就是我们 经常会在函数的参数里使用bool参数&#xff0c;这会大大地降低代码的可读性。 不信&#xff1f;我们先来看看下面的代码。 当你读到下面的代码&#xff0c;你会觉得这个代码是什么意…

修改ceph-disk源码,增加指定ceph.conf部署osd的功能

文章目录 ceph环境源码修改 主文件:`ceph-disk/main.py`main函数入口parse_args(argv)增加子命令解析get_conf函数使`conf`生效修改所有调用get_conf函数的上级函数参数配置由于最近工作中需要优化osd部署流程,单节点并发加盘过程需要指定特定conf文件,来完成单盘db,wal分区…