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的信息能夠訪問官方網站:

想及時瞭解GalHttprequest的最新消息能夠關注做者的微博:
歡迎轉發,請保留文章出處: http://my.oschina.net/qiuscut/blog/54882
相關文章
相關標籤/搜索