1. 程式人生 > >Android-OKGO簡單使用(後續更新更多使用方法)

Android-OKGO簡單使用(後續更新更多使用方法)

支援的常用功能:

  • 一般的 get,post,put,delete,head,options請求
  • 基於Post的大文字資料上傳,postString(),postJson()等
  • 多檔案和多引數統一的表單上傳(允許監聽上傳進度)
  • 支援一個key上傳一個檔案,也可以一個Key上傳多個檔案
  • 大檔案下載和下載進度回撥
  • 大檔案上傳和上傳進度回撥
  • 支援cookie的記憶體儲存和持久化儲存,支援傳遞自定義cookie
  • 提供網路快取功能,預設支援304快取協議,並額外擴充套件了三種本地快取模式
  • 支援301、302重定向
  • 支援鏈式呼叫
  • 支援可信證書和自簽名證書的https訪問
  • 支援根據Tag取消網路請求
  • 支援自定義泛型Callback,自動根據泛型返回物件

1.新增依賴

compile 'com.lzy.net:okgo:2.1.4'

2.簡單使用

  1. 進行全域性配置,一般在 Aplication,或者基類的onCreate方法中,只需要呼叫一次即可,可以配置除錯開關,全域性的超時時間,公共的請求頭和請求引數等資訊。如果在Aplication中初始化,需要在清單檔案中註冊 Aplication。

    //---------這裡給出的是示例程式碼,告訴你可以這麼傳,實際使用的時候,根據需要傳,不需要就不傳-------------//
       HttpHeaders headers = new HttpHeaders();
       headers.put("commonHeaderKey1", "commonHeaderValue1");    //header不支援中文
       headers.put("commonHeaderKey2", "commonHeaderValue2");
       HttpParams params = new HttpParams();
       params.put("commonParamsKey1", "commonParamsValue1");     //param支援中文,直接傳,不要自己編碼
       params.put("commonParamsKey2", "這裡支援中文引數");
       //-----------------------------------------------------------------------------------//
    
    
       //必須呼叫初始化
       OkGo.init(this);
    
       //以下設定的所有引數是全域性引數,同樣的引數可以在請求的時候再設定一遍,那麼對於該請求來講,請求中的引數會覆蓋全域性引數
       //好處是全域性引數統一,特定請求可以特別定製引數
       try {
           //以下都不是必須的,根據需要自行選擇,一般來說只需要 debug,快取相關,cookie相關的 就可以了
           OkGo.getInstance()
    
               // 開啟該除錯開關,列印級別INFO,並不是異常,是為了顯眼,不需要就不要加入該行
               // 最後的true表示是否列印okgo的內部異常,一般開啟方便除錯錯誤
               .debug("OkGo", Level.INFO, true)
    
               //如果使用預設的 60秒,以下三行也不需要傳
               .setConnectTimeout(OkGo.DEFAULT_MILLISECONDS)  //全域性的連線超時時間
               .setReadTimeOut(OkGo.DEFAULT_MILLISECONDS)     //全域性的讀取超時時間
               .setWriteTimeOut(OkGo.DEFAULT_MILLISECONDS)    //全域性的寫入超時時間
    
               //可以全域性統一設定快取模式,預設是不使用快取,可以不傳,具體其他模式看 github 介紹 https://github.com/jeasonlzy/
               .setCacheMode(CacheMode.NO_CACHE)
    
               //可以全域性統一設定快取時間,預設永不過期,具體使用方法看 github 介紹
               .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
    
               //可以全域性統一設定超時重連次數,預設為三次,那麼最差的情況會請求4次(一次原始請求,三次重連請求),不需要可以設定為0
               .setRetryCount(3)
    
               //如果不想讓框架管理cookie(或者叫session的保持),以下不需要
       //      .setCookieStore(new MemoryCookieStore())            //cookie使用記憶體快取(app退出後,cookie消失)
               .setCookieStore(new PersistentCookieStore())        //cookie持久化儲存,如果cookie不過期,則一直有效
    
               //可以設定https的證書,以下幾種方案根據需要自己設定
               .setCertificates()                                  //方法一:信任所有證書,不安全有風險
       //      .setCertificates(new SafeTrustManager())            //方法二:自定義信任規則,校驗服務端證書
       //      .setCertificates(getAssets().open("srca.cer"))      //方法三:使用預埋證書,校驗服務端證書(自簽名證書)
       //              //方法四:使用bks證書和密碼管理客戶端證書(雙向認證),使用預埋證書,校驗服務端證書(自簽名證書)
       //      .setCertificates(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"))//
    
               //配置https的域名匹配規則,詳細看demo的初始化介紹,不需要就不要加入,使用不當會導致https握手失敗
       //      .setHostnameVerifier(new SafeHostnameVerifier())
    
               //可以新增全域性攔截器,不需要就不要加入,錯誤寫法直接導致任何回撥不執行
       //      .addInterceptor(new Interceptor() {
       //            @Override
       //            public Response intercept(Chain chain) throws IOException {
       //                 return chain.proceed(chain.request());
       //            }
       //       })
    
               //這兩行同上,不需要就不要加入
               .addCommonHeaders(headers)  //設定全域性公共頭
               .addCommonParams(params);   //設定全域性公共引數
    
       } catch (Exception e) {
           e.printStackTrace();
       }   
  2. 使用get請求獲取資料;

     /**
       * get請求獲取資料
       * @param url
       */
      private void getByOkGo(String url){
          OkGo.get(url)                            // 請求方式和請求url
                  .tag(this)                       // 請求的 tag, 主要用於取消對應的請求
                  .cacheKey("cacheKey")            // 設定當前請求的快取key,建議每個不同功能的請求設定一個
                  .cacheMode(CacheMode.DEFAULT)    // 快取模式,詳細請看快取介紹
                  .execute(new StringCallback() {
                      @Override
                      public void onSuccess(String s, Call call, Response response) {
                          mTextView2.setText(s);
                      }
                  });
      }
  3. post請求獲取資料,其中params方法用來新增請求引數,params新增引數的時候,最後一個isReplace為可選引數,預設為true,即代表相同key的時候,後新增的會覆蓋先前新增的;

     /**
       * post請求
       * @param url
       */
      private void postByOkGo(String url){
          OkGo.post(url)
                  .tag(this)
                  .cacheKey("cachePostKey")
                  .cacheMode(CacheMode.DEFAULT)
                  .params("method", "album.item.get")
                  .params("appKey", "myKey")
                  .params("format", "json")
                  .params("albumId", "Lqfme5hSolM")
                  .params("pageNo", "1")
                  .params("pageSize", "2")
                  .execute(new StringCallback() {
                      @Override
                      public void onSuccess(String s, Call call, Response response) {
                          mTextView2.setText(s);
                      }
    
                      @Override
                      public void onError(Call call, Response response, Exception e) {
                          super.onError(call, response, e);
                          mTextView2.setText(e.getMessage());
                      }
                  });
      }
  4. 檔案下載,FileCallback具有三個過載的構造方法,檔案目錄如果不指定,預設下載的目錄為 sdcard/download/,檔名如果不指定,則按照以下規則命名:

    • 首先檢查使用者是否傳入了檔名,如果傳入,將以使用者傳入的檔名命名
    • 如果沒有傳入,那麼將會檢查服務端返回的響應頭是否含有Content-Disposition=attachment;filename=FileName.txt該種形式的響應頭,如果有,則按照該響應頭中指定的檔名命名檔案,如FileName.txt
    • 如果上述響應頭不存在,則檢查下載的檔案url,例如:http://image.baidu.com/abc.jpg,那麼將會自動以abc.jpg命名檔案
    • 如果url也把檔名解析不出來,那麼最終將以nofilename命名檔案; 
      /**
       * 下載檔案
       * @param url 下載地址
       * @param destFileDir 儲存檔案路徑
       * @param destFileName 儲存檔名
       */
      private void downLoad(String url, String destFileDir, String destFileName){
          OkGo.get(url)//
                  .tag(this)//
                  .execute(new FileCallback(destFileDir, destFileName) {  //檔案下載時,可以指定下載的檔案目錄和檔名
                      @Override
                      public void onSuccess(File file, Call call, Response response) {
                          // file 即為檔案資料,檔案儲存在指定目錄
                      }
      
                      @Override
                      public void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                          //這裡回撥下載進度(該回調在主執行緒,可以直接更新ui)
                          //currentSize totalSize以位元組byte為單位
                      }
                  });
      }
  5. 大檔案上傳;

    /**
    * 多檔案上傳
    * @param url
    * @param keyName
    * @param files 檔案集合
    */
    private void uploadFiles(String url, String keyName, List<File> files){
      OkGo.post(url)//
              .tag(this)//
              //.isMultipart(true)       // 強制使用 multipart/form-data 表單上傳(只是演示,不需要的話不要設定。預設就是false)
              //.params("param1", "paramValue1")        // 這裡可以上傳引數
              //.params("file1", new File("filepath1"))   // 可以新增檔案上傳
              //.params("file2", new File("filepath2"))     // 支援多檔案同時新增上傳
              .addFileParams(keyName, files)    // 這裡支援一個key傳多個檔案
              .execute(new StringCallback() {
                  @Override
                  public void onSuccess(String s, Call call, Response response) {
                      //上傳成功
                      Toast.makeText(getApplicationContext(), "上傳成功", Toast.LENGTH_SHORT).show();
                  }
    
                  @Override
                  public void upProgress(long currentSize, long totalSize, float progress, long networkSpeed) {
                      //這裡回撥上傳進度(該回調在主執行緒,可以直接更新ui)
                      mProgressBar.setProgress((int) (100 * progress));
                      mTextView2.setText("已上傳" + currentSize/1024/1024 + "MB, 共" + totalSize/1024/1024 + "MB;");
                  }
              });
    }
  6. 請求載入圖片;

    /**
     * 請求網路圖片
     * @param url
     */
    private void getBitmap(String url) {
        OkGo.get(url)//
                .tag(this)//
                .execute(new BitmapCallback() {
                    @Override
                    public void onSuccess(Bitmap bitmap, Call call, Response response) {
                        // bitmap 即為返回的圖片資料
                        mImageView.setImageBitmap(bitmap);
                    }
                });
    }
  7. 取消請求。每個請求前都設定了一個引數tag,取消則通過OkGo.cancel(tag)執行。 例如:在Activity中,當Activity銷燬取消請求,可以在onDestory裡面統一取消;

    @Override
    protected void onDestroy() {
        super.onDestroy();
    
        //根據 Tag 取消請求
        OkGo.getInstance().cancelTag(this);
    
        //取消所有請求
        OkGo.getInstance().cancelAll();
    }
  8. 其他細節還是多看官方文件,寫的還是非常詳細的。

相關推薦

Android-OKGO簡單使用後續更新使用方法

支援的常用功能: 一般的 get,post,put,delete,head,options請求 基於Post的大文字資料上傳,postString(),postJson()等 多檔案和多引數統一的表單上傳(允許監聽上傳進度) 支援一個key上傳一個檔案,也可以

Windows 10 專業版啟用方法親測有效暫時只可以用180天後續更新可以久的啟用方式

右鍵單擊開始按鈕: 管理員方式執行Powershell,然後依次輸入下面三條命令,回車,會看到三條提示語句。 分別為, slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 紅色字型為啟用金鑰 獲取金鑰成功。 slmgr /skms kms.03k

android -------- OkGo (讓網絡請求簡單的框架)

功能 過期 pat ada 上傳下載 ast xutils 隊列 trac 項目地址:https://github.com/jeasonlzy 該庫是封裝了okhttp的網絡框架,可以與RxJava完美結合,比Retrofit更簡單易用。支持大文件上傳下載,上傳進度回

MIS的趨勢必定是圍繞機器取代人手,分工越來越細小餐廳都支持微信自助點餐,結賬時就打個折,相當於省了1、2個人手,SQL發明以後,程序員的工作

nbsp 我認 公司 點餐 管理系 特定 組裝 bsp 適合 最後,我還想簡略的談談MIS及MIS快速開發工具的未來。MIS的趨勢必定是圍繞機器取代人手,分工越來越細。比如:現在有些小型的咖啡廳裏的財務子系統就簡單到不需要使用者有會計知識,相當於省了會計人手;有些小餐廳都支

相關連線後續更新

linux安裝nginx_rtmp_model的時候報錯解決unknown directive “rtmp” in /etc/nginx/nginx.conf:76 https://stackoverflow.com/questions/37442819/unknown-direct

linux_基本命令使用後續更新

安裝檔案上傳下載快捷鍵 --》 rz/sz yum -y install lrzsz 獲取程序名、程序號以及使用者ID netstat –nlpt 修改主機名(重啟後永久生效)–>centos6

Kotlin 繼續助力 Android 開發,並計劃涉足領域

作者:James Lau,產品經理 今年10月3日,Kotlin 社群年度最大的現場盛會 KotlinConf 2018 舉行。2018 年是 Kotlin 的盛年,這門語言持續被採用,並贏得了大量開發者的喜愛。事實上,在 Google Play 上排名前 1000 的 And

TFTP傳輸協議後續更新

   簡單介紹 “TFTP是一個傳輸檔案的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小檔案傳輸的。因此它不具備通常的FTP的許多功能,它只能從檔案伺服器上獲得或寫入檔案,不能列出目錄,不進行認證,它傳輸

Android 6.0動態申請許可權一次申請

Android一次申請多個動態許可權 昨天做一個錄音功能的程式,發現在開啟Mic的時候發生了程式崩潰,但是錯誤提示裡面居然沒有提示許可權禁止。  解決的方法有:1.手動去選擇“應用”–>“程式”–>找到那個程式新增許可權,後面程式就可以正常使用了 2.設定動態請

深度學習的一些會議和期刊後續更新

ECCV,ECCV的全稱是European Conference on Computer Vision(歐洲計算機視覺國際會議) ICCV,ICCV的全稱是International Comfere

android 下拉重新整理+底部載入 QJPageReloadView使用

前:本文為QiaoJim原創,轉載請附原文連結,謝謝合作! ----------------------------------------------------------------------------------------------- 本篇主要簡單介紹QJ

【00】面向ArcGIS的Python程式設計——常見錯誤大全後續更新中......

1、縮排錯誤,導致Parsing error IndentationError: unexpected indent (line 3)錯誤。 2、注意>>>和...的區別 3、在使用指令碼執行地理處理工具,例如裁剪(clip)工具時,如果輸入

Android知識點清單不斷更新

I、JAVA SE 1、面向物件 2、集合框架 3、異常 4、多執行緒 5、I/O流 6、網路程式設計 7、設計模式 II、Web 1、JSP 2、HTML/CSS 3、JavaScript III、概述 Android架構(

優秀的Android開源框架持續更新

開源是軟體發展的趨勢,越來越多的人投入到開源世界中去。我們可以從開源世界中獲得很多有益的東西,本著不重複造輪子的精神,我們應該充分利用這些開源專案的成果。本文會持續更新湧現出來的優秀開源框架。 UI BottomNavigation and

六、 Android常見錯誤 持續更新中……

1、Unable to resolve target 'android-2' 安裝低版本的api,再default.properties這個檔案中把target=android-2改成 target=android-7終於就沒有問題了。 2、Invalid start tag LinearLayout

Android ListView列表 重新整理和載入

上下拉實現重新整理和載入更多的ListView,如下: [java] view plaincopyprint? package com.sin.android.ui;  import android.content.Context;  import androi

JS筆試面試題後續更新

1. 下面程式碼的執行結果是? var length = 10; function fn() { console.log(this.length); } var obj = { length:

傅立葉變換和傅立葉級數的區別與聯絡後續更新補充DTFT、DFS

傅立葉級數僅適用於週期訊號,傅立葉變換可以視作傅立葉級數的延伸,可以用於分析非週期訊號的頻譜特性。事實上,引入衝擊函式後,週期訊號也可以進行傅立葉變換。 傅立葉級數:所有周期訊號都可以分解為不同頻率的

android仿支付寶首頁、應用編輯介面

[github地址](https://github.com/oldbirdy/recyclerdemo “github地址”) 專案越來越大,模組越來越多,首頁上展示的東西又不能全部都展示出來,只能選擇幾個重要的模組展示出來。但是不同的使用者關注的層面不一樣,只

Java面向對象接口、

聲明 講課 概述 條件 默認修飾符 implement 復用性 接口實現類 2.3 面向對象 今日內容介紹 u 接口 u 多態 第1章 接口 1.1 接口概念 接口是功能的集合,同樣可看做是一種數據類型,是比抽象類更為抽象的”類”。 接口只描述所應該具備的方法,並沒有具體實