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相关推荐

  1. android 调用下载,使用Android系统提供的DownloadManager来下载文件

    在android2.3以后android系统提供了一个系统组件来供其他app调用来下载东西,使用起来非常方便. 例如我们可以拿来下载app的新版本apk,同时在同时注册一个广播接收器来接收下载完成时D ...

  2. 深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出

    最近有些忙,切实体验了一把拖更的羞耻感 ( *︾▽︾) 本文和上一篇深入Android系统(十二)Android图形显示系统-1-显示原理与Surface关系比较密切,撸完前篇更易理解本文啦 (๑‾ ...

  3. Android Studio打不开虚拟机,两种情况详解

    Android Studio打不开虚拟机,两种情况详解 文章目录 Android Studio打不开虚拟机,两种情况详解 1.VT-x is disabled in BIOS 2.Emulator文件 ...

  4. Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调

    Android Studio 是谷歌基于IntelliJ IDEA开发的安卓开发工具,有点类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调 ...

  5. Android系统自带样式(android:theme)(转)

    Android系统自带样式(android:theme)(转) android:theme="@android:style/Theme.Dialog" : Activity显示为对 ...

  6. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  7. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  8. Android Studio无线Wifi调试手机的两种方案

    Android Studio无线Wifi调试手机的两种方案 第一种方式 使用adbWireless连接 第二种方式 使用插件Android Wifi ADB连接 总结 第一种方式 使用adbWirel ...

  9. pc使用android,如何在电脑上使用Android系统在PC上玩玩Android游戏

    由于很多原因,搭载Windows及Android双系统的产品一直没有大规模上市,而类似华硕Transformer Book Trio这样的双系统产品价格则高达万元.那么,如果你想体验一下Android ...

最新文章

  1. 【java】兴唐第二十三节课作业
  2. 小测一下fastjson的速度(纯娱乐)
  3. Rotate List
  4. 移动端网页fixed布局问题解决方案
  5. Mysql数据库中的as和distinct的使用
  6. 在ARM开发板的嵌入式linux系统上运行的QT程序,必须得要在linux里用QT编吗
  7. 代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...
  8. SaaS 通识系列 1:云计算是什么
  9. 计算机c语言笔试试题,计算机二级c语言笔试题和面试题答案(2019最新)
  10. matlab 索力迭代,索梁组合体系桥梁施工索力确定的割线迭代法
  11. 2020 年,最适合 AI 的 5 种编程语言
  12. AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK
  13. 从Word Embedding到Bert模型——自然语言处理预训练技术发展史
  14. opencv计算机视觉学习笔记一
  15. jquery提交表单错误
  16. 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
  17. USB学习笔记——认识USB
  18. otlv4 mysql_OTL 使用记录
  19. 黄山行之《黄山前山游》
  20. JAVA看云判断天气_如何看云识天气

热门文章

  1. C# 模拟Windows键盘事件
  2. centOS安装python3.7.2
  3. 帆软地址栏传参,实例
  4. PHP 获取服务器详细信息【转】
  5. PHP 遍历数组的方法汇总
  6. android handler、looper、message、messageQueue、
  7. CodeSmith终极玩法
  8. 设计模式之开放封闭原则
  9. Eclipse4JavaEE安装SpringBoot
  10. 【案例】数据量猛增,BI分析效率太低怎么破?