GalHttprequest類庫簡介 - android平臺上的一個輕量級的http網絡請求及緩存框架
GalHttprequest名字的由來
開 發過iOS項目的朋友都應該知道 ASIHTTPRequest類庫, ASIHTTPRequest對iOS SDK的底層API進行了封裝,并使用一套簡單的API調用接口即可十分方便地調用HTTP請求。由于之前有接觸過ios開發,對 ASIHTTPRequest印象十分深刻,最近一直在開發android上的應用,發覺android明顯缺少這樣一個方便請求HTTP數據及對數據進 行緩存管理的工具,因此有了實現一個類似ASIHTTPRequest框架的想法。這就是GalHttprequest名字的由來。
<div>
<br />
</div>
<div>
<b>GalHttprequest的簡介</b>
</div>
<div>
GalHttprequest 是基于Httpclient上再進行封裝的開源項目了,提供了許多比系統自帶的網絡相關類庫更加方便強大的接口API。目前它已支持以下功能:
</div>
<ul><li><span style="color:#000000;font-family:Tahoma;line-height:normal;font-size:medium;"><span style="color:#333333;font-family:微軟雅黑, Verdana, sans-serif, 宋體;font-size:13px;line-height:20px;">同步請求Stirng、InputStream、Bitmap;</span></span></li>
<div>
<span style="color:#333333;font-family:'微軟雅黑, Verdana, sans-serif, 宋體';"><span style="line-height:20px;"><b>GalHttprequest使用的小例子</b></span></span>
</div>
<div>
<span style="color:#333333;font-family:'微軟雅黑, Verdana, sans-serif, 宋體';"><span style="line-height:20px;"><b> </b></span></span>
</div>
<div>
<span style="color:#333333;font-family:'微軟雅黑, Verdana, sans-serif, 宋體';"><span style="line-height:20px;"><b> 以下是代碼中有可能要用到的鏈接</b></span></span>
</div>
<div>
<span style="color:#333333;font-family:'微軟雅黑, Verdana, sans-serif, 宋體';"><b> </b></span>
<b>static</b>
<b>final</b> String PATH_INPUTSTREAM = "http://qiuming.sinaapp.com/?feed=comments-rss2" ;
</div>
<div>
<b>static</b>
<b>final</b> String PATH_STRING = "http://qiuming.sinaapp.com/?feed=comments-rss2" ;
</div>
<div>
<b>static</b>
<b>final</b> String PATH_BITMAP = "http://tp3.sinaimg.cn/1859125850/180/5628821209/1" ;
</div>
<div>
<b>static</b>
<b>final</b> String PATH_WITHPARAMS = "http://qiuming.sinaapp.com/" ;
</div>
<div>
<b>static</b>
<b>final</b> String PATH_POSTCONTENT = "http://qiuming.sinaapp.com/?feed=comments-rss2" ;
</div>
<div>
<br />
</div>
<div>
</div>
<div>
<ul><li>同步請求InputStream</li>
</ul>
</div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_INPUTSTREAM );
<div>
<br />
</div>
<div>
// 如果不檢測緩存,則設置:
</div>
<div>
// request.setCacheEnable(false);
</div>
<div>
// 必須在調用startXXX()函數之前設置
</div>
<div>
<br />
</div>
<div>
// 返回的緩存已經是ufferedInputStream類型
</div>
<div>
InputStream is = request .startSynchronous ();
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
<b>if</b> ( is!=
<b>null</b> ) {
</div>
<div>
textView .setText (is .toString ());
</div>
<div>
}
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li>同步請求String</li>
</ul>
</div>
</div>
request = GalHttpRequest .requestWithURL ( this, PATH_STRING );
// 根據服務器返回的狀態讀取內容,如果服務器內容沒有改變,則直接讀取緩存內容,如果服務器內容已經修改,則從服務器拉取數據
<div>
// 并刷新緩存內容
</div>
<div>
String string = request. startSyncRequestString ();
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li>同步請求Bitmap</li>
</ul>
</div>
<div>
title .setText ("同步請求Bitmap" );
</div>
<div>
Header header =
<b>new</b> BasicHeader ("Accept-Language" , "zh-cn,zh;q=0.5" );
</div>
<div>
// 支持添加自定義的
<u>Http</u> Header請求
</div>
<div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_BITMAP ,
</div>
<div>
<b>new</b> Header[] { header }) ;
</div>
<div>
// 請求Bitmap,由于圖片基本上不改變,因此如果存在緩存,則直接從緩存讀取
</div>
<div>
Bitmap bitmap = request. startSyncRequestBitmap ();
</div>
<div>
imageView .setImageBitmap (bitmap );
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li>異步請求InputStream</li>
</ul>
</div>
<div>
title .setText ("異步請求InputStream" );
</div>
<div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_INPUTSTREAM );
</div>
<div>
// 必須先設置回調函數,否則調用異步請求無效
</div>
<div>
request. setListener (
<b>new</b> GalHttpRequestListener () {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> loadFinished (
<b>final</b> InputStream is,
<b>boolean</b> fromcache ) {
</div>
<div>
//注意,由于返回的是InputStream,一般情況都需要長時間操作,所以,回調函數是在子線程調用
</div>
<div>
//因此使用handler
</div>
<div>
handler .post (
<b>new</b> Runnable() {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> run () {
</div>
<div>
textView .setText (is .toString ());
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
<div>
}
</div>
<div>
@Override
</div>
<div>
// 請求失敗時,有可能可以從緩存里面讀取數據返回
</div>
<div>
<b>public</b>
<b>void</b> loadFailed (
<b>final</b> HttpResponse respone ,
</div>
<div>
InputStream cacheInputStream ) {
</div>
<div>
handler .post (
<b>new</b> Runnable() {
</div>
<div>
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> run () {
</div>
<div>
textView .setText (respone .toString ());
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
<div>
}
</div>
<div>
}) ;
</div>
<div>
request. startAsynchronous ();
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li>異步請求String</li>
</ul>
</div>
<div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_STRING );
</div>
<div>
//第一次調用startAsynRequestString或者startAsynRequestBitmap必須在主線程調用
</div>
<div>
//因為只有在主線程中調用才可以初始化GalHttprequest內部的全局句柄Handler
</div>
<div>
request. startAsynRequestString (
<b>new</b> GalHttpLoadTextCallBack () {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> textLoaded (String text ) {
</div>
<div>
//該部分允許于UI線程
</div>
<div>
textView .setText (text );
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<div>
<br />
</div>
<div>
<ul><li>異步請求Bitmap</li>
</ul>
</div>
<div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_BITMAP );
</div>
<div>
request. startAsynRequestBitmap (
<b>new</b> GalHttpLoadImageCallBack () {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> imageLoaded (Bitmap bitmap ) {
</div>
<div>
imageView .setImageBitmap (bitmap );
</div>
<div>
imageView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li><span style="font-family:Consolas;font-size:15px;">異步組裝參數</span></li>
</ul>
</div>
<div>
title .setText ("組裝http參數" );
</div>
<div>
//交給GalHttprequest自動組裝
<u>url</u>中的參數
</div>
<div>
NameValuePair feedPair =
<b>new</b> BasicNameValuePair ("feed" ,"comments-rss2" );
</div>
<div>
request = GalHttpRequest .requestWithURL (
<b>this</b>, PATH_WITHPARAMS ,feedPair );
</div>
<div>
request. startAsynRequestString (
<b>new</b> GalHttpLoadTextCallBack () {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> textLoaded (String text ) {
</div>
<div>
//該部分允許于UI線程
</div>
<div>
textView .setText (text );
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
</div>
<div>
<br />
</div>
<div>
<br />
</div>
<div>
<div>
<ul><li>異步post 數據給服務器</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
//交給GalHttprequest自動組裝 url中的參數
request = GalHttpRequest .requestWithURL (
this, PATH_POSTCONTENT );
<div>
//設置post內容
</div>
<div>
request. setPostValueForKey ("name" , "qiuscut" );
</div>
<div>
request. startAsynRequestString (
<b>new</b> GalHttpLoadTextCallBack () {
</div>
<div>
@Override
</div>
<div>
<b>public</b>
<b>void</b> textLoaded (String text ) {
</div>
<div>
//該部分允許于UI線程
</div>
<div>
textView .setText ("在這里post應該是無效的,因為當前url不支持post" );
</div>
<div>
textView .setVisibility (View .VISIBLE );
</div>
<div>
}
</div>
<div>
}) ;
</div>
<div>
<br />
</div>
</div>
</div>
</div>
</div>
</div>
<br />
<div>
<div>
<div>
<div>
<div>
想獲取關于GalHttprequest的信息可以訪問官方網站:
</div>
<div>
<div>
<span style="border-collapse:separate;font-family:Tahoma;line-height:normal;text-align:-webkit-auto;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;font-size:medium;"><span style="text-align:-webkit-left;"><a href="/misc/goto?guid=5033828366619726131" rel="nofollow" target="_blank">http://code.google.com/p/galhttprequest/</a></span></span>
</div>
</div>
</div>
<div>
<br />
</div>
<div>
想及時了解GalHttprequest的最新消息可以關注作者的微博:
</div>
<div>
<div>
<span style="border-collapse:separate;font-family:Tahoma;line-height:normal;text-align:-webkit-auto;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;font-size:medium;"><span style="text-align:-webkit-left;"><a href="/misc/goto?guid=5033828366852397629" rel="nofollow" target="_blank">http://weibo.com/201200360</a></span></span>
</div>
<div>
<span style="border-collapse:separate;font-family:Tahoma;line-height:normal;text-align:-webkit-auto;-webkit-border-horizontal-spacing:0px;-webkit-border-vertical-spacing:0px;font-size:medium;"><br />
</span> </div>
</div>
</div>
</div>
</div>
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
推薦閱讀
GalHttprequest類庫簡介 - android平臺上的一個輕量級的http網絡請求及緩存框架
GalHttprequest名字的由來 開 發過iOS項目的朋友都應該知道?ASIHTTPRequest類庫,?ASIHTTPRequest對iOS SDK的底層API進行了封裝,并使用一套簡單...
Android網絡編程之Http通信
Android中提供的HttpURLConnection和HttpClient接口可以用來開發HTTP程序。 1. HttpURLConnection接口 首先需要明確的是,Http通信中的PO...
一個不錯的PHP緩存類介紹
緩存在實際使用當中應用很廣泛,可以減輕對服務器數據庫的訪問,提高運行速度。目前很多CMS內容管理系統中頻繁使用緩存機制來提高系統運行的效率。下面是一個寫得不錯的緩存類,可以參考下緩存的機制與寫法...
開源數據庫MongoDB入門簡介
MongoDB是一個基于分布式文件存儲的數據庫開源項目。由C++語言編寫。旨在為WEB應用提供可護展的高性能數據存儲解決方案。 它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有...