今天介绍xUtils的最后一个模块——HttpUtils,拖了那么久,终于要结束了。另外,码字不易,如果大家有什么疑问和见解,欢迎大家留言讨论。HttpUtils是解决日常工作过程中繁杂的上传下载文件以及各种Get和post请求的必备工具类,通过这个类,开源非常方便关注接口的业务,不必再再写那么冗长的代码。下面全文都围绕着四个中心点去依次展开,分别是:HttpGet请求,HttpPost请求,下载文件和上传文件。

HttpGet请求。相信从事Android网络应用的开发的同学对这个一定不会陌生,长期的开发会让大家积累下一个可以复用的工具类。而xUtils就是帮助了我们把那些工具类给抽象整合成一个更具扩展性的帮助类。比如HtttpGet请求,这里只简要介绍下关键的应用方法,具体的细节还请大家自己去下载xUtils的源码去研究研究了,我们介绍的足够应用到我们的应用开发中去了。通常的HttpGet请求会把一系列的请求参数挂在请求地址的后面,拖出一节长长的尾巴,十分的惹人厌,这里可以通过像HttpPost请求的参数那样组成一个类似BasicNameValuePair的对象直接封装到请求方法中去,省去拼接url的麻烦,同时也可以设置超时时间。另外请求的方法中提供了一个回调类,这个类中有处理不同请求结果的回调方法,比如说请求过程中的回调,请求成功的回调以及请求出现错误时的回调。下面直接上代码看下。

[java] view
plain
copy

  1. RequestParams params = new RequestParams();
  2. params.addQueryStringParameter("method", "info");
  3. params.addQueryStringParameter("access_token",
  4. "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");
  5. HttpUtils http = new HttpUtils();
  6. http.configCurrentHttpGetCacheExpiry(1000 * 10);
  7. http.send(HttpRequest.HttpMethod.GET,
  8. "https://pcs.baidu.com/rest/2.0/pcs/quota",
  9. params,
  10. new RequestCallBack<String>() {
  11. @Override
  12. public void onStart() {
  13. resultText.setText("conn...");
  14. }
  15. @Override
  16. public void onLoading(long total, long current) {
  17. resultText.setText(current + "/" + total);
  18. }
  19. @Override
  20. public void onSuccess(String result) {
  21. resultText.setText("response:" + result);
  22. }
  23. @Override
  24. public void onFailure(HttpException error, String msg) {
  25. resultText.setText(msg);
  26. }
  27. });

HttpPost请求。为了统一请求的风格,HttpPost请求的方式和HttpGet的几乎可以说是一模一样,一样提供了各种对应不同结果的回调方法,大家自己看下面的代码就晓得了,真是一目了然。

[java] view
plain
copy

  1. RequestParams params = new RequestParams();
  2. params.addQueryStringParameter("method", "mkdir");
  3. params.addQueryStringParameter("access_token", "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");
  4. params.addBodyParameter("path", "/apps/测试应用/test文件夹");
  5. HttpUtils http = new HttpUtils();
  6. http.send(HttpRequest.HttpMethod.POST,
  7. "https://pcs.baidu.com/rest/2.0/pcs/file",
  8. params,
  9. new RequestCallBack<String>() {
  10. @Override
  11. public void onStart() {
  12. resultText.setText("conn...");
  13. }
  14. @Override
  15. public void onLoading(long total, long current) {
  16. resultText.setText(current + "/" + total);
  17. }
  18. @Override
  19. public void onSuccess(String result) {
  20. resultText.setText("upload response:" + result);
  21. }
  22. @Override
  23. public void onFailure(HttpException error, String msg) {
  24. resultText.setText(msg);
  25. }
  26. });

下面为大家介绍一个非常非常实用的功能,就是通过Http协议去下载文件,再也不必为Android中下载文件而写下一大坨一大坨的代码,如此长的代码调试起来真是能气死人。还记得以前做过一个项目,有个需求就是能下载视频的,而且还要能支持断点下载,只写那么一个下载工具类就写了一两天,再加上调试,真心把人都给逼疯了。要是xUtils早点在那个时候面世,想那时做那个需求也不必那么通过。HttpUtils为开发者提供了非常方便的下载api,可以通过简单的几个参数来实现下载,甚至断点下载的功能。上代码。

[java] view
plain
copy

  1. HttpHandler  handler = http.download(
  2. downloadAddrEdit.getText().toString(),
  3. "/sdcard/fileexplorer.apk",
  4. true, // 如果目标文件存在,接着未完成的部分继续下载。
  5. true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。
  6. new RequestCallBack<File>() {
  7. @Override
  8. public void onStart() {
  9. resultText.setText("conn...");
  10. }
  11. @Override
  12. public void onLoading(long total, long current) {
  13. resultText.setText(current + "/" + total);
  14. }
  15. @Override
  16. public void onSuccess(File result) {
  17. resultText.setText("downloaded:" + result.getPath());
  18. }
  19. @Override
  20. public void onFailure(HttpException error, String msg) {
  21. resultText.setText(error.getExceptionCode() + ":" + msg);
  22. }
  23. });

注意:下载过程中如果需要暂停下载,也只需简单的一行代码来实现:mHandler.stop(),如果设置断点下载的话,下次会重新开始的话,会自动从上次下载的断点处继续下载。



最后介绍的功能就是上传文件了,这个也是在项目中也是非常常见的。比如用户上传头像,再比如网盘应用需要把本地文件上传到云端等等。同时HttpUtils也同时为开发者提供了上传过程中和上传结果的各个回调接口。大家在使用HttpUtils上传文件的时候,只要仿照下面的代码去码代码就快可以基本满足业务的需要了。

[java] view
plain
copy

  1. RequestParams params = new RequestParams();
  2. params.addQueryStringParameter("method", "upload");
  3. params.addQueryStringParameter("path", "/apps/测试应用/test.zip");
  4. // 请在百度的开放access_tokenapi测试页面找到自己的access_token
  5. params.addQueryStringParameter("access_token", "3.1042851f652496c9362b1cd77d4f849b.2592000.1377530363.3590808424-248414");
  6. params.addBodyParameter("file", new File("/sdcard/test.zip"));
  7. HttpUtils http = new HttpUtils();
  8. http.send(HttpRequest.HttpMethod.POST,
  9. "https://pcs.baidu.com/rest/2.0/pcs/file",
  10. params,
  11. new RequestCallBack<String>() {
  12. @Override
  13. public void onStart() {
  14. resultText.setText("conn...");
  15. }
  16. @Override
  17. public void onLoading(long total, long current) {
  18. resultText.setText(current + "/" + total);
  19. }
  20. @Override
  21. public void onSuccess(String result) {
  22. resultText.setText("upload response:" + result);
  23. }
  24. @Override
  25. public void onFailure(HttpException error, String msg) {
  26. resultText.setText(msg);
  27. }
  28. });

文章转载地址: http://blog.csdn.net/lanyeming2012/article/details/14209455

补充:

今天更新了Android SDK到23.0.1版本,结果项目里面的Xutils部分报错

Error:(22, 35) 错误: 无法访问HttpRequestBase 

找不到org.apache.http.client.methods.HttpRequestBase的类文件

然后果断Android.com走起,发现Android 6.0后,Android的网络请求强制使用HttpUrlConnection,SDK中已经移除了HttpClient,我擦,这不是坑么,项目都快做完了,居然搞出这问题,

最后经过多方面的和基友们沟通,发现可以这样解决

需要在eclipse下libs里添加org.apache.http.legacy.jar,android studio里在相应的module下的build.gradle中加入:

<code class="hljs matlab has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">android <span class="hljs-cell" style="box-sizing: border-box;">{
useLibrary <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'org.apache.http.legacy'</span>
}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

然后Rebuild一下,OK,完美

xUtils框架的介绍(四)的更多相关文章

  1. xUtils框架的介绍(一)

    微信账号申请终于通过了,这是我们第一次Android干货分享. 想来是第一次,要对得起“干货”二字. 今天我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils, 它是在aFina ...

  2. xUtils框架的介绍(三)

    接上回,继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把Db ...

  3. xUtils框架的介绍(二)

    xUtils中有四大组件可以供我们使用,分别是ViewUtils.HttpUtils.BitmapUtils以及DbUtils.如果你没能先读一下我的上一篇文章,那么请你移步过去先整体了解一下,再回过 ...

  4. python nose测试框架全面介绍四

    四.内部插件介绍 1.Attrib 标记,用于筛选用例 在很多时候,用例可以分不同的等级来运行,在nose中很增加了这个功能,使用attrib将用例进行划分 有两种方式: ef test_big_do ...

  5. Go语言Web框架gwk介绍 (四)

    事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(moudle, name string, h ...

  6. Go语言Web框架gwk介绍4

    Go语言Web框架gwk介绍 (四)   事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(m ...

  7. python nose测试框架全面介绍十---用例的跳过

    又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...

  8. python nose测试框架全面介绍七--日志相关

    引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的 ...

  9. xUtils框架

    我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils,它是在aFinal基础上进行重构和扩展的框架,相比aFinal有很大的改善.同时,如果如果你的应用是基于网络的,那么只要处理 ...

随机推荐

  1. NOIP模拟 6.30

    Problem 1 护花(flower.cpp/c/pas) [题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时 ...

  2. 【react】react-reading-track

    这是一个很有趣的图书阅读demo 先放github地址:https://github.com/onlyhom/react-reading-track 我觉得这个博主的项目很有意思呢 我们一起看看代码啊 ...

  3. 阿里云出手SaaS生态,中国SaaS市场小而不强有望破解

    企业服务SaaS市场还有很大的增长空间.SaaS的鼻祖Salesforces今年5月迈上了千亿美元市值的门槛,再一次为ToB市场注入了兴奋剂.单单一个SaaS CRM,目前全球的市场规模就超过400亿 ...

  4. 使用pip安装pymysql

    本人使用的python版本是3.6,该版本是自带有pip.可以直接通过pip工具进行安装pymysql: 第一步:找到pip.exe路径. 例如我安装的目录如下,自带的pip工具的python版本,在 ...

  5. css中用一张背景图做页面的技术有什么优势?

    css中用一张背景图做页面的技术有什么优势? 简单介绍一下 CSS Sprites 的优点: 当用户往U盘中拷200张图片,会等很久.但是如果弄成一个文件,再拷贝就会快很多. CSS Sprites ...

  6. web标准中定义id与class有什么区别吗

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x ...

  7. JS函数式编程 - 概念

    最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...

  8. vue移动端项目

    用vue mint-ui  jquery-weui写了一个移动端demo 技术栈 vue2.0 vue-router axios mint-ui jquery-weui webpack 页面截图 最后 ...

  9. MySQL用户管理+MySQL权限管理

    我们现在默认使用的都是root用户,超级管理员,拥有全部的权限! 但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库! 所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限 ...

  10. cat、head、tail、more和less命令(文件内容浏览)

    一.cat命令 cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容. 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容.因此,一般用more等命令分屏显 ...