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();
android系统提供了url通信,Android两种HTTP通信,HttpURLConnection和HttpClient相关推荐
- android 调用下载,使用Android系统提供的DownloadManager来下载文件
在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便. 例如我们可以拿来下载app的新版本apk,同时在同时注册一个广播接收器来接收下载完成时D ...
- 深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出
最近有些忙,切实体验了一把拖更的羞耻感 ( *︾▽︾) 本文和上一篇深入Android系统(十二)Android图形显示系统-1-显示原理与Surface关系比较密切,撸完前篇更易理解本文啦 (๑‾ ...
- Android Studio打不开虚拟机,两种情况详解
Android Studio打不开虚拟机,两种情况详解 文章目录 Android Studio打不开虚拟机,两种情况详解 1.VT-x is disabled in BIOS 2.Emulator文件 ...
- Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调
Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调 ...
- Android系统自带样式(android:theme)(转)
Android系统自带样式(android:theme)(转) android:theme="@android:style/Theme.Dialog" : Activity显示为对 ...
- 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )
文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...
- 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法
将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...
- Android Studio无线Wifi调试手机的两种方案
Android Studio无线Wifi调试手机的两种方案 第一种方式 使用adbWireless连接 第二种方式 使用插件Android Wifi ADB连接 总结 第一种方式 使用adbWirel ...
- pc使用android,如何在电脑上使用Android系统在PC上玩玩Android游戏
由于很多原因,搭载Windows及Android双系统的产品一直没有大规模上市,而类似华硕Transformer Book Trio这样的双系统产品价格则高达万元.那么,如果你想体验一下Android ...
最新文章
- 【java】兴唐第二十三节课作业
- 小测一下fastjson的速度(纯娱乐)
- Rotate List
- 移动端网页fixed布局问题解决方案
- Mysql数据库中的as和distinct的使用
- 在ARM开发板的嵌入式linux系统上运行的QT程序,必须得要在linux里用QT编吗
- 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
- SaaS 通识系列 1:云计算是什么
- 计算机c语言笔试试题,计算机二级c语言笔试题和面试题答案(2019最新)
- matlab 索力迭代,索梁组合体系桥梁施工索力确定的割线迭代法
- 2020 年,最适合 AI 的 5 种编程语言
- AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK
- 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
- opencv计算机视觉学习笔记一
- jquery提交表单错误
- 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
- USB学习笔记——认识USB
- otlv4 mysql_OTL 使用记录
- 黄山行之《黄山前山游》
- JAVA看云判断天气_如何看云识天气