《Android开发卷——HTTP网络通信,HTTP网络连接》
为了访问互联网,需要设置应用程序获取“androd.permission.INTERNET”权限的许可。
一、使用Apache接口(org.apache.http)并实现网络连接的基本知识
HttpClient client = new DefaultHttpClient();
要想从服务器检索有用的网络信息,必须使用HttpGet类构造器来帮助实现
HttpGet request = new HttpGet(“http://www.*****.com/test?id=***&name=****”);
然后还需要类HttpClient的execute()方法的帮助,通过此方法中的HttpGet对象来检索
HttpResponse response = client.execute(request);
最后需要解读已检索的响应(读取网页内容)
BufferedReader rd = new BufferedRreader(new InputStreamReader(response.getEntity().getContent()));
String line = “”;
While((line = rd.readLine()) != null){
Log.d(“output:”,line);
line = line+line;
}
Post方法
HttpClient client = new DafaultHttpClient();
HttpPost post = new HttpPost(URL);
List<NameValuePair> parms = new ArrayList<NameValuePair>();
parms.add(new NameValuePair(“id”,”1001”));
parms.add(new NameValuePair(“name”,”johm”));
HttpEntity formEntity = new UrlEncodeFormEntity(params);
post.setEntity(formEntity,HTTP.UTF_8);
Httpresponse response = new client.execute(post);
If(response.getStatusLine.getStatusCode == HttpStatus.SC_OK){
InputStream is = response.getEntity().getContent();
String result = isStreamString(is);
Assert.assertEqualse(result,”POST_SUCCESS”);//断言判断网页返回的内容是否为” POST_SUCCESS”;
} private String isStreamString(InputStream is) throws Exception{
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len = -1;
while((len = is.read(buf)) != -1){
bo.write(buf,0,len);
}
return new String(bo.toByteArray());
}
在文件MyApplication.java中扩展了系统的Application:
public class MyApplication extends Application{
private HttpClient httpClient;
public void onCreate(){
super.onCreate();
httpClient = this.createHttpClient();
}
public void onLowMemory(){
super.onLowMemory();
this.shutdownHttpClient();
}
public void onTerminamte(){
super.onTerminate();
this.shutdownHttpClient();
}
//创建HttpClient实例
private HttpClient createHttpClient(){
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setversion(params,HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params,HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params,true);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(“http”,PlainSocketFactory.getSocketFactory(),80);
schReg.register(“https”,SSLSocketFatory.getSocketFactory(),443);
ClientConnectionManager connMgr = new ThreadSafeClientConnManager(params,schReg);
return new DefaultHttpClient(connMgr,params);
}
//关闭连接管理器并释放资源
private void shutdownHttpClient(){
if(httpClient != null && httpClient.getConnectionManager() != null){
httpClient.getConnectionManager().shutdown();
}
//对外提供HttpClient实例
public HttpClient getHttpClient(){
return httpClient;
}
}
在上述代码中重写了onCreate()方法,在系统启动时就创建一个HttpClient。
重写了onLowMemory()和onTerminate()方法,在内存不足和应用结束时关闭连接,释放资源。
需要注意的是,当实例化DefaultHttpClient时,传入一个由ThreadSafeClientConnManager创建的ClientConnectionManager实例,负责管理HttpClient的HTTP连接。
在文件AndroidManifest.xml中进行如下配置,目的是让“优化”版的Application生效。
<application android:name=”.MyApplication”…>…</application>
系统就会使用前面编写的MyApplication,然后就可以在context中调用getApplication()来获取MyApplication实例。
经过上面的“优化”处理配置,接下来就可以在活动中应用了
private void execute(){
try{
MyApplication app = (MyApplication) this.getApplication();
HttpClient client = app.getHttpClient();
HttpGet request = new HttpGet(“http://www.*****.com/test?id=***&name=****”);
HttpResponse response = client.execute(request);
if(response.getStatusLine.getStatusCode == HttpStatus.SC_OK){
InputStream is = response.getEntity().getContent();
String result = isStreamString(is);
Toast.makeText(this,result,Toast.LENGTH_LONG).show();
}
}catch(Exception e){
e.printStackTrace();
}
}
private String isStreamString(InputStream is) throws Exception{
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len = -1;
while((len = is.read(buf)) != -1){
bo.write(but,0,len);
}
return new String(bo.toByteArray());
}
尊重原创,转载请注明出处:http://blog.csdn.net/chillax_li/article/details/22078625
《Android开发卷——HTTP网络通信,HTTP网络连接》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- HarmonyOS NEXT应用开发案例——阻塞事件冒泡
介绍 本示例主要介绍在点击事件中,子组件enabled属性设置为false的时候,如何解决点击子组件模块区域会触发父组件的点击事件问题:以及触摸事件中当子组件触发触摸事件的时候,父组件如果设置触摸事件 ...
- 【走进RDS】之SQL Server性能诊断案例分析
简介: 数据库性能诊断不仅对其数据库技能要求较高,而且需要大量的前期准备工作,如收集各种性能基线.性能指标和慢SQL日志等,尤其是面对多数据库性能调优时,往往事倍功半. 客户的困扰 前几天某程序员小王 ...
- 块存储监控与服务压测调优利器-EBS Lens发布
简介:SLS团队联合EBS团队发布了EBS Lens,针对块存储提供数据分析.资源监控的功能,可以帮助用户获取云上块存储资源信息与性能监控数据.提升云上块存储资源的管理效率.高效分析业务波动与资源性 ...
- Hologres揭秘:优化COPY,批量导入性能提升5倍+
简介: 揭秘Hologres优化COPY的技术原理,实现批量导入性能提升5倍+ Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ...
- Quick BI电子表格: 新手亦可表格自由
简介: 随着企业业务快速增长,单纯的表或交叉表展现的数据模式相对固定,已不能满足企业中不同角色用户.不同业务场景数据可视化分析展现的诉求.在满足业务人员可视化需求层面,Quick BI不仅提供了丰富 ...
- Apache Flink 在京东的实践与优化
简介: Flink 助力京东实时计算平台朝着批流一体的方向演进. 本文整理自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题<Apache Flink 在京 ...
- [FAQ] GitHub 开启二次验证之后,如何通过 https clone 项目 ?
在 Github Personal Access Tokens 页面,点击生成一个新的 tokon. 此时使用这个 token 作为用户的密码来 clone 项目.
- 一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
前言 C#代码格式化工具除了ReSharper和CodeMaid,还有一款由.NET开源.免费(MIT License).轻量级的C#语言代码格式化工具:CSharpier. 工具介绍 CSharpi ...
- 小程序中使用 lottie 动画 | 踩坑经验分享
最近被拉去支援紧急需求(赶在五一节假日前上线的,双休需要加班),参与到项目中才知道,开发的项目是微信小程序技术栈的.由于是临时支援,笔者也很久没开发过微信小程序了,所以挑选了相对独立,业务属性相对轻薄 ...
- layui.js
目录 用法: 1.在base.js里导入layui插件 2.在使用的html页面里引入 base.js lucky.js index.html 用法: 1.在base.js里导入layui插件 2.在 ...