`
rocky_lei
  • 浏览: 41201 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

GalHttprequest类库简介——android平台上的一个轻量级的http网络请求及缓存框架

 
阅读更多

GalHttprequest名字的由来

开发过iOS项目的朋友都应该知道 ASIHTTPRequest类库, ASIHTTPRequest对iOS SDK的底层API进行了封装,并使用一套简单的API调用接口即可十分方便地调用HTTP请求。由于之前有接触过ios开发,对ASIHTTPRequest印象十分深刻,最近一直在开发android上的应用,发觉android明显缺少这样一个方便请求HTTP数据及对数据进行缓存管理的工具,因此有了实现一个类似ASIHTTPRequest框架的想法。这就是GalHttprequest名字的由来。

GalHttprequest的简介

GalHttprequest 是基于Httpclient上再进行封装的开源项目了,提供了许多比系统自带的网络相关类库更加方便强大的接口API。目前它已支持以下功能:

* 同步请求Stirng、InputStream、Bitmap;
* 异步请求String、InputStream、Bitmap;支持回调接口;
* 支持异步下载文件,提供监听进度回调接口;
* 支持缓存参数设置;
* 支持多线程及队列请求;
* 自动适配移动、联通、电信wap代理;
* 支持快捷post请求;
* 附带一个强大的日志管理工具类LogUtil
* 自动组装url参数
* 提供简单post数据到服务器的API

GalHttprequest使用的小例子

以下是代码中有可能要用到的链接
static final String PATH_INPUTSTREAM = “http://qiuming.sinaapp.com/?feed=comments-rss2″ ;
static final String PATH_STRING = “http://qiuming.sinaapp.com/?feed=comments-rss2″ ;
static final String PATH_BITMAP = “http://tp3.sinaimg.cn/1859125850/180/5628821209/1″ ;
static final String PATH_WITHPARAMS = “http://qiuming.sinaapp.com/” ;
static final String PATH_POSTCONTENT = “http://qiuming.sinaapp.com/?feed=comments-rss2″ ;

* 同步请求InputStream

request = GalHttpRequest .requestWithURL ( this, PATH_INPUTSTREAM );

// 如果不检测缓存,则设置:
// request.setCacheEnable(false);
// 必须在调用startXXX()函数之前设置

// 返回的缓存已经是ufferedInputStream类型
InputStream is = request .startSynchronous ();
textView .setVisibility (View .VISIBLE );
if ( is!= null ) {
textView .setText (is .toString ());
}

* 同步请求String

request = GalHttpRequest .requestWithURL ( this, PATH_STRING );
// 根据服务器返回的状态读取内容,如果服务器内容没有改变,则直接读取缓存内容,如果服务器内容已经修改,则从服务器拉取数据
// 并刷新缓存内容
String string = request. startSyncRequestString ();

* 同步请求Bitmap

title .setText ("同步请求Bitmap" );
Header header = new BasicHeader ("Accept-Language" , "zh-cn,zh;q=0.5" );
// 支持添加自定义的 Http Header请求
request = GalHttpRequest .requestWithURL ( this, PATH_BITMAP ,
new Header[] { header }) ;
// 请求Bitmap,由于图片基本上不改变,因此如果存在缓存,则直接从缓存读取
Bitmap bitmap = request. startSyncRequestBitmap ();
imageView .setImageBitmap (bitmap );

* 异步请求InputStream

title .setText ("异步请求InputStream" );
request = GalHttpRequest .requestWithURL ( this, PATH_INPUTSTREAM );
// 必须先设置回调函数,否则调用异步请求无效
request. setListener (new GalHttpRequestListener () {
@Override
public void loadFinished ( final InputStream is, boolean fromcache ) {
//注意,由于返回的是InputStream,一般情况都需要长时间操作,所以,回调函数是在子线程调用
//因此使用handler
handler .post ( new Runnable() {
@Override
public void run () {
textView .setText (is .toString ());
textView .setVisibility (View .VISIBLE );
}
}) ;
}
@Override
// 请求失败时,有可能可以从缓存里面读取数据返回
public void loadFailed ( final HttpResponse respone ,
InputStream cacheInputStream ) {
handler .post ( new Runnable() {

@Override
public void run () {
textView .setText (respone .toString ());
textView .setVisibility (View .VISIBLE );
}
}) ;
}
}) ;
request. startAsynchronous ();

* 异步请求String

request = GalHttpRequest .requestWithURL ( this, PATH_STRING );
//第一次调用startAsynRequestString或者startAsynRequestBitmap必须在主线程调用
//因为只有在主线程中调用才可以初始化GalHttprequest内部的全局句柄Handler
request. startAsynRequestString (new GalHttpLoadTextCallBack () {
@Override
public void textLoaded (String text ) {
//该部分允许于UI线程
textView .setText (text );
textView .setVisibility (View .VISIBLE );
}
}) ;

* 异步请求Bitmap

request = GalHttpRequest .requestWithURL ( this, PATH_BITMAP );
request. startAsynRequestBitmap (new GalHttpLoadImageCallBack () {
@Override
public void imageLoaded (Bitmap bitmap ) {
imageView .setImageBitmap (bitmap );
imageView .setVisibility (View .VISIBLE );
}
}) ;

* 异步组装参数

title .setText ("组装http参数" );
//交给GalHttprequest自动组装 url中的参数
NameValuePair feedPair = new BasicNameValuePair ("feed" ,"comments-rss2" );
request = GalHttpRequest .requestWithURL ( this, PATH_WITHPARAMS ,feedPair );
request. startAsynRequestString (new GalHttpLoadTextCallBack () {
@Override
public void textLoaded (String text ) {
//该部分允许于UI线程
textView .setText (text );
textView .setVisibility (View .VISIBLE );
}
}) ;

* 异步post 数据给服务器

//交给GalHttprequest自动组装 url中的参数
request = GalHttpRequest .requestWithURL ( this, PATH_POSTCONTENT );
//设置post内容
request. setPostValueForKey ("name" , "qiuscut" );
request. startAsynRequestString (new GalHttpLoadTextCallBack () {
@Override
public void textLoaded (String text ) {
//该部分允许于UI线程
textView .setText ("在这里post应该是无效的,因为当前url不支持post" );
textView .setVisibility (View .VISIBLE );
}
}) ;

想获取关于GalHttprequest的信息可以访问官方网站:

http://code.google.com/p/galhttprequest/

想及时了解GalHttprequest的最新消息可以关注作者的微博:

http://weibo.com/201200360

欢迎转发,请保留文章出处:http://qiuming.sinaapp.com/?p=51

分享到:
评论
1 楼 istep 2012-08-06  
试用看看那

相关推荐

    android http请求及缓存框架GalHttprequest

    android http请求及缓存框架GalHttprequest

    python学习导航.txt

    python

    node-v8.3.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    嵌入式微处理器设计及应用

    摘要:为满足智能家居座椅的交互式运动控制需求,基于AT89S52设计了嵌入式座椅运动控制系统。使用VB.net设计了游戏手柄按键读取软件,并在此基础上设计了座椅运动控制软件,软件可分别在“手柄模式”和“鼠标模式”下与嵌入式座椅运动控制器通信,进而控制座椅进行加速、减速、正转和反转等运动;构建了控制系统实验装置,实验结果表明,“鼠标模式”下,通过鼠标点击控制软件上功能按钮可实现对座椅的准确运动控制;“手柄模式”下,游戏手柄不仅可控制座椅运动,还可同步控制电脑上运行的游戏或远程遥控车,实现浸入感较强的座椅运动娱乐应用。

    2024年中国NFC RFID阅读器行业研究报告.docx

    2024年中国NFC RFID阅读器行业研究报告

    node-v9.9.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    04-18 周四 为LLM-inference项目配置GitHub CI过程记录

    2024年中国AI和机器视觉行业研究报告.docx

    2024年中国AI和机器视觉行业研究报告

    计算机二级【公共基础知识速学教程】.pdf

    内容概要:这份资料包含了计算机二级公共基础知识速学教程的内容大纲,涵盖了数据结构与算法、程序设计基础、软件工程基础、数据库设计基础等多个章节。其中包括了算法复杂度、数据结构、栈、队列、链表、二叉树、查找、排序等内容,以及程序设计方法、软件工程概念、数据库设计原理等知识点。 适用人群:适合希望系统学习计算机二级公共基础知识的学生、计算机专业学习者、程序员、软件工程师以及对数据结构、算法和数据库设计感兴趣的人群,希望通过系统学习提升自己的计算机基础知识和技能。 使用场景及目标:该教程可用于计算机相关专业的课程学习、自学提升或备考计算机二级公共基础考试。学习者可以通过逐章学习和实践,掌握数据结构与算法、程序设计基础、软件工程基础和数据库设计基础等知识,提高自己在计算机领域的理论基础和实践能力。 其他说明:学习者在使用这份教程时,可以结合实际案例和练习题进行深入学习和巩固。建议按照章节顺序系统学习,理解各个知识点的概念和应用,并通过实践项目或练习加深对计算机基础知识的理解和掌握。通过系统学习,可以提升自己在计算机领域的专业水平和能力。

    减肥管理,全球前10强生产商排名及市场份额.docx

    减肥管理,全球前10强生产商排名及市场份额

    04-19 周五 GitHub actions-runner 程序解释

    04-19 周五 GitHub actions-runner 程序解释

    node-v8.16.1-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    基于Gnuradio与Hackrf的无线通信收发系统的实现.pdf

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    5g与数字孪生赋能数字化矿山总体解决方案.pptx

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    ISO IEC TS 27022-2021 信息技术信息安全管理系统过程指南.pdf

    一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法

    "Image and video denoising by sparse 3D transform-domain collaborative filtering" 是一篇关于图像和视频去噪技术的研究论文,它介绍了一种基于稀疏3D变换域的协同滤波方法。这种方法的核心思想是利用图像或视频中的空间和时间冗余信息来去除噪声

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏PV电源系统

    IEC 60364-7-712-2017 低压电气装置.第7-712部分:特殊装置或位置的要求.太阳能光伏(PV)电源系统.pdf

    全国海拔高度文件,精度1公里

    附python查询脚本,需要请联系我

    BS EN 60068-2-2-2007 第2-2部分:试验——试验B:干热.pdf

    BS EN 60068-2-2-2007 第2-2部分:试验——试验B:干热.pdf

    生物农药,全球前十九强生产商排名及市场份额.docx

    生物农药,全球前十九强生产商排名及市场份额

Global site tag (gtag.js) - Google Analytics