android系统提供了url通信,Android两种HTTP通信,HttpURLConnection和HttpClient

Android系统中主要提供了两种方式来进行HTTP通信,HttpURLConnection和HttpClient,几乎在任何项目的代码中我们都能看到这两个类的身影,使用率非常高。

不过HttpURLConnection和HttpClient的用法还是稍微有些复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是乎,一些Android网络通信框架也就应运而生,比如说AsyncHttpClient,它把HTTP所有的通信细节全部封装在了内部,我们只需要简单调用几行代码就可以完成通信操作了。再比如Universal-Image-Loader,它使得在界面上显示网络图片的操作变得极度简单,开发者不用关心如何从网络上获取图片,也不用关心开启线程、回收图片资源等细节,Universal-Image-Loader已经把一切都做好了。这里简单介绍下HttpURLConnection和HttpClient的使用。至于框架后面会研究后,再介绍

HttpClient的get使用

HttpClient mClient; //http客户端

public static HttpEntity getEntity(String uri,ArrayList params,int method) throws    ClientProtocolException, IOException{

mClient=new DefaultHttpClient();

HttpUriRequest request=null;

switch (method) {

case HTTP_GET://get请求

StringBuilder sb=new StringBuilder(uri);

//判断设置参数为不为空

if(null!=params&&!params.isEmpty()){

sb.append("?");

//设置配置参数

for (BasicNameValuePair param : params) {

sb.append(param.getName()).append("=")

.append(URLEncoder.encode(param.getValue(), "utf-8")).append("&");

}

sb.deleteCharAt(sb.length()-1);    //删除多余的 &

}

HttpGet get=new HttpGet(sb.toString());    //发送get请求

request=get;

break;

}

//cookie缓存

HttpClientParams.setCookiePolicy(mClient.getParams(), CookiePolicy.BROWSER_COMPATIBILITY);

//连接时间

mClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);

//设置请求超时时间

mClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);

//执行请求 获得响应

HttpResponse response = mClient.execute(request);

if(response.getStatusLine().getStatusCode()==200){    //如果成功 返回HttpEntity 对象

return response.getEntity();

}

return null;

}

HttpURLConnection的post使用 post是 表单方式请求的

URL url =new URL(actionUrl);

HttpURLConnection con=(HttpURLConnection)url.openConnection();

con.setReadTimeout(10 * 1000);        //读数请求时间

con.setConnectTimeout(10 * 1000);    //连接超时

/* 允许Input、Output,不使用Cache */

con.setDoInput(true);    //以后就可以使用conn.getInputStream().read();

con.setDoOutput(true);    //以后就可以使用conn.getOutputStream().write()  get用不到这个

con.setUseCaches(false);    //不使用缓存

/* 设置传送的method=POST */

con.setRequestMethod("POST");

/* setRequestProperty */

con.setRequestProperty("Connection", "Keep-Alive");    //保持tcp连接

con.setRequestProperty("Charset", "UTF-8");            //传输字符格式 UTF-8

con.setRequestProperty("Content-Type",

"multipart/form-data;boundary="+boundary);

/* 设置DataOutputStream */

DataOutputStream ds =

new DataOutputStream(con.getOutputStream());

ds.writeBytes(twoHyphens + boundary + end);

ds.writeBytes("Content-Disposition: form-data; "+

"name=\"file1\";filename=\""+

newName +"\""+ end);

ds.writeBytes(end);

/* 取得文件的FileInputStream */

FileInputStream fStream =new FileInputStream(uploadFile);

/* 设置每次写入1024bytes */

int bufferSize =1024;

byte[] buffer =new byte[bufferSize];

int length =-1;

/* 从文件读取数据至缓冲区 */

while((length = fStream.read(buffer)) !=-1)

{

/* 将资料写入DataOutputStream中 */

ds.write(buffer, 0, length);

}

ds.writeBytes(end);

ds.writeBytes(twoHyphens + boundary + twoHyphens + end);

/* close streams */

fStream.close();

ds.flush();

/* 取得Response内容 */

InputStream is = con.getInputStream();

int ch;

StringBuffer b =new StringBuffer();

while( ( ch = is.read() ) !=-1 )

{

b.append( (char)ch );

}

/* 将Response显示于Dialog */

showDialog("上传成功"+b.toString().trim());

/* 关闭DataOutputStream */

ds.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECSHOP 订单状态 记录

记录订单状态 order_status /* 订单状态 */ define(‘OS_UNCONFIRMED’, 0); // 未确认 define(‘OS_CONFIRMED’, 1); // 已确认 define(‘OS_CANCELED’, 2); // 已取消 define(‘OS_INVALID’, 3); // 无效 define(‘…

git+jekyll部署备忘

github,会自动帮忙编译jekyll编写的文件,只要将文件放到gh-pages分支 (或者使用官方教程的二级域名方式,项目名字,可以随便起,官网的例子是 用户名.github.com 作为项目名字,可以使用 用户名.github.com …

buidulbs android.jar,在将AS项目迁移到IDEA时,无法将com.android.bui...

我需要从Android Studio迁移到IntelliJ IDEA,因为我需要在Java中进行其他一些非Android的工作.我从git克隆了我的项目,并将其导入到IDEA中.但是,我在此过程中遇到了Gradle错误.我已经搜索过,但是找不到解决我的错误的答案.这是事件日志03:39:42 PM All files are up-to-date03:…

[华为机试练习题]60.水仙花数

题目 描述: 水仙花数又称阿姆斯特朗数。 水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。(例如:1^3 5^3 3^3 153) 求输入的数字是否为水仙花数练习阶段: 初级 代码 /*-------------------------…

fscanf的返回值未成功输入的元素个数 .xml

test.txt 中保存的为&#xff1a;12345程序int i,j,k; FILE *fpfopen("e://test.txt","r"); if (fpNULL) { //return FALSE; } while (!feof(fp)) { jfscanf(fp,"%d%d",&i,&k); cout<<i<</t<<k<</t<…

Chrome英文版离线安装包下载

在原来在线安装地址后面加上 ?standalone1 即可 https://www.google.com/intl/en/chrome/browser/desktop/index.html?standalone1

搜索 由浅入深 之一 水题

搜索很重要&#xff0c;是很难学的算法&#xff0c;能看懂很简单&#xff0c;但是要想真正做出题来就比较困难了&#xff0c;那么&#xff0c;我们现在就水题开始研究搜索。 水题之&#xff1a; 1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 830 …

android studio创建文件,如何在Android Studio中创建File Templates

标签&#xff1a; File Template Android Studio我发现一个可以让写程序变得简单的方法&#xff0c;那就是自定义文件模板(Custom File Templates).那么什么是File Templates呢&#xff1f;说白了&#xff0c;就是一个已经包含一部分代码的源文件如何创建File Templates首先&am…

odoo 中多币种处理(外币处理)

2019独角兽企业重金招聘Python工程师标准>>> 1. odoo多币种处理 http://www.cnblogs.com/godzone/archive/2012/11/05/2754436.html 2. OpenERP的价格表&#xff08;Pricelist&#xff09;机制: http://www.chinamaker.net/html/2011/study_1123/78.html 3. odoo …

android handler、looper、message、messageQueue、

一&#xff1a;handler&#xff0c;looper&#xff0c;message&#xff0c;messagequeue&#xff0c;thread handler: 消息处理着&#xff0c;负责Message消息的发送&#xff08;handler.sendMessage(....)&#xff09;以及处理消息&#xff0c;对于handler处理消息则需要实现h…

h5 android数字键盘,【笔记】移动端H5数字键盘input type=number的处理(IOS和Android)...

在Vue中的项目&#xff0c;基于VUX-UI开发&#xff0c;一个常见的需求&#xff1a;1、金额输入框2、弹出数字键盘3、仅支持输入两位小数&#xff0c;限制最大11位数&#xff0c;不允许0开头第一&#xff0c;首先想到额就是在VUX-UI中制定typenumber。--不可行VUX中的文档和代码…

Sybase数据库应用系统调优的五大领域

Sybase数据库应用系统调优的五大领域 2011/3/14/13:49来源&#xff1a;慧聪it网本 文以“某大型商业银行的网上银行系统”这一很具有典型意义的企业级大型Sybase数据库应用系统为例&#xff0c;涉及了数据库应用系统调优的五大领域&#xff1a;压力测试、 应用端调优、服务器端…

JQGrid 参数、属性API

JQGrid是一个在jquery基础上做的一个表格控件&#xff0c;以ajax的方式和服务器端通信。 JQGrid Demo 是一个在线的演示项目。在这里&#xff0c;可以知道jqgrid可以做什么事情。下面是转自其他人blog的一个学习资料&#xff0c;与其说是学习资料&#xff0c;说成查询帮助文档更…

android 6.0 ios9谁快,没安卓6.0流畅?iOS 9突飞猛进终于不卡

今天早些时候&#xff0c;iOS 9.1正式发布&#xff0c;改进系统Bug&#xff0c;添加新功能等&#xff0c;但还有不少反应系统流畅了。不知道是否是心里作用的关系&#xff0c;之前不少果粉吐槽iOS 9过于卡顿&#xff0c;苹果也是在一个版本一个版本的改进&#xff0c;这次的iOS…

(UML两个汇总)九种图。

最后总结UML关系&#xff0c;有明确的关系&#xff0c;现在让我们总结一下UML九图。。图往往比文字要直观&#xff0c;因此&#xff0c;当我们开发软件。文件必须是不可或缺的人物&#xff0c;。以下我将这九种图分了一下&#xff1a; 我们还能够将这九种图分为静态图和动态图&…

AutoMapper搬运工之自定义类型转换

前言 最近还挺忙&#xff0c;还有点累&#xff0c;一直都没更新了&#xff0c;实在是懒呀。正题之前先说点别的&#xff0c;最近公司要扩张了&#xff0c;需要大量开发&#xff0c;领导说推荐有钱可以拿&#xff0c;如此好机会&#xff0c;我就趁机做个广告。ShippingRen.com招…

XML基础

XML的英文全称是Extensible Markup Language&#xff0c;中文翻译为可扩展标记语言。它是网络应用开发的一项新技术。 与HTML一样&#xff0c;XML也是一种标记语言&#xff0c;但是XML的数据描述能力比HTML强&#xff0c;XML具有描述所有已知和未知数据的能力。XML扩展性比较好…

html使标签为正方形,W3C CSS测试答案

您的回答&#xff1a;1.CSS 指的是&#xff1f;您的回答&#xff1a;Cascading Style Sheets2.在以下的 HTML 中&#xff0c;哪个是正确引用外部样式表的方法&#xff1f;您的回答&#xff1a;3.在 HTML 文档中&#xff0c;引用外部样式表的正确位置是&#xff1f;您的回答&…

SqlBulkCopy 批量复制数据到数据表

使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是&#xff0c;数据源不限于 SQL Server&#xff1b;可以使用任何数据源&#xff0c;只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据 使用Datatable作为数据源的方式&#xff1a;下面的代码使用到了Co…

OC-封装、继承、多态

面向对象的三大特征&#xff1a;封装、继承、多态 1.封装 什么是封装&#xff1a;在程序上&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口&#xff0c;控制在程序中属性的读和修改的访问级别&#xff1b;将对象得到的数据和行为&#xff08;或功能&#xff0…