GalHttprequest類庫簡介 - android平臺上的一個輕量級的http網絡請求及緩存框架

openkk 12年前發布 | 5K 次閱讀 Chrome Dev Editor GTK

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>

  • 異步請求String、InputStream、Bitmap;支持回調接口;
  • 支持異步下載文件,提供監聽進度回調接口;
  • 支持緩存參數設置;
  • 支持多線程及隊列請求;
  • 自動適配移動、聯通、電信wap代理;
  • 支持快捷post請求;
  • 附帶一個強大的日志管理工具類LogUtil
  • 自動組裝url參數
  • 提供簡單post數據到服務器的API
  • </ul>

    <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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!