1. 程式人生 > >OKHttp 執行攔截器前

OKHttp 執行攔截器前

@Override public Response proceed(Request request) throws IOException {
    return proceed(request, streamAllocation, httpCodec, connection); //過載方法
  }

  public Response proceed(Request request, StreamAllocation streamAllocation, HttpCodec httpCodec,
      RealConnection connection) throws IOException {
    if (index >= interceptors.size()) throw new AssertionError();

    calls++;

    // If we already have a stream, confirm that the incoming request will use it.
    if (this.httpCodec != null && !this.connection.supportsUrl(request.url())) {
      throw new IllegalStateException("network interceptor " + interceptors.get(index - 1)
          + " must retain the same host and port");
    }

    // If we already have a stream, confirm that this is the only call to chain.proceed().
    if (this.httpCodec != null && calls > 1) {
      throw new IllegalStateException("network interceptor " + interceptors.get(index - 1)
          + " must call proceed() exactly once");
    }

    // Call the next interceptor in the chain.
      // index+1 下次進來時取得下一個攔截器
 RealInterceptorChain next = new RealInterceptorChain(interceptors, streamAllocation, httpCodec,
        connection, index + 1, request, call, eventListener, connectTimeout, readTimeout,
        writeTimeout);
     //取出攔截器並執行intercept(...)方法
   Interceptor interceptor = interceptors.get(index);
    Response response = interceptor.intercept(next);

    // Confirm that the next interceptor made its required call to chain.proceed().
   確保每個攔截器都呼叫了proceed
 if (httpCodec != null && index + 1 < interceptors.size() && next.calls != 1) {
      throw new IllegalStateException("network interceptor " + interceptor
          + " must call proceed() exactly once");
    }

    // Confirm that the intercepted response isn't null.
    if (response == null) {
      throw new NullPointerException("interceptor " + interceptor + " returned null");
    }

    if (response.body() == null) {
      throw new IllegalStateException(
          "interceptor " + interceptor + " returned a response with no body");
    }

    return response;
  }

作用: 建立新攔截器鏈執行 攔截器intercept方法

相關推薦

OKHttp 執行攔截

@Override public Response proceed(Request request) throws IOException { return proceed(request, streamAllocation, httpCodec, connection); //過載方法 }

OkHttp五大攔截(自己專業整理)

一、什麼是OkHttp3 (1)定義: OkHttp3是一個處理網路請求的開源專案,是目前最火的網路框架,作者是Square公司, 用於代替Android提供的HttpConnection和HttpClient。** (2)OkHttp的特點        1、是基於

okhttp通過攔截輸出html原始碼內容

使用Retrofit加okhttp,如果返回失敗的話,callback中response中不能看到失敗的網頁原始碼 為此我們有兩種方法,通過okhttp攔截器或者retrofit自定義ResponseConvertFactory實現 public cla

OkHttp+OkGo+攔截

//1.OkHttp //導依賴 implementation 'com.squareup.okhttp3:okhttp:3.12.1' //okhttp public class OKHttpUtil { //3、提供一個本地OKHttpUtil引用 private static O

android,retrofit,okhttp,日誌攔截,使用攔截Interceptor統一列印請求與響應的json

   可以打印出傳遞的引數以及返回的結果 :  最下面有完整的 retrofit 案例 ------------------retrofit的使用----START-------------------------- 首先 : 依賴 : compile 'com.squ

okhttp攔截

okhttp 其實就做了 3 個操作,分別是 請求(call) ,TCP 連線(Connection) ,資料流(okio),這 3 個操作都是通過 okhttp 的攔截器來完成的 okhttp 的攔截器到底是有些,我們可以在 opkhttp3/RealCall 裡面的

okhttp 日誌攔截Logging-interceptor

okhttp是目前使用及其廣泛的Android網路框架,可以由使用者高度定製,這是該框架最大的優勢之一。okhttp的用法,就不在此累述了,今天給大家分享一下給okhttp新增日誌攔截,列印的方法。 先上程式碼: public class LoggingIntercep

OKHttp 網路攔截okhttp封裝

okhttp網路攔截器(自定義)import java.io.IOException;        import okhttp3.FormBody;        import okhttp3.Interceptor;        import okhttp3.Reque

OkHttp封裝攔截

package com.lixinyang.mylanjiqi; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; imp

okhttp封裝+攔截+異常捕獲類

首先新增okhttp的封裝類 importandroid.os.Handler; import android.os.Looper; import com.bwie.moni.LogInterceptor; import java.io.IOException; im

Okhttp二次封裝,OkhttpClient使用單例模式封裝,回撥封裝成主執行緒,日誌攔截

public class HttpUtils {     private static final String TAG = "HttpUtils";     private static volatile HttpUtils instance;  

解決方法|struts2執行action加入攔截,導致獲取不到引數

今天學到使用ONGL表示式實現型別轉換雖然我還是不懂ONGL表示式是啥,但抱著“先get書本例子的方法再慢慢深入學習”的想法還是跟著書本敲程式碼結果!在結果頁面裡怎麼也獲取不到輸入的引數!經過百度後發現,是因為我使用了自定義的攔截器,如果在配置檔案中加入了自定義的攔截器,那預

struts執行過程和攔截

strutsstruts執行過程和攔截器Struts2執行過程 Struts2攔截器概述1 struts2是框架,封裝了很多的功能,struts2裏面封裝的功能都是在攔截器裏面 2 struts2裏面封裝了很多的功能,有很多攔截器,不是每次這些攔截器都執行,每次執行默認的攔截器 3 struts2裏面默認攔截

攔截執行順序

handle 如果 tro 執行 結束 到來 hand com true 1.在請求到來的時候,攔截器會攔截,執行preHandle方法。如果該方法的返回值為true,   就繼續往下執行,否則,就結束執行,往下就不在執行任何方法。 2.在preHandle的返回值為tru

SpringMVC多攔截執行

throws err class mode println ret stub post 如果 如果有多個攔截器,執行的順序是在SpringMVC的配置文件裏的前後順序。 <mvc:interceptors>   <bean class="com.neue

mybatis攔截實現查看sql執行效率

nth 內部 設置 work check sel nts mage view package cc.zeelan.common.utils; import java.lang.reflect.Field; import java.sql.Statement; impor

十一、利用攔截統計action執行時間

err cep time exceptio execute method current result ack 1.新建login.jsp <body> <a href="HelloAction.action">點擊統計action執行時間

Mybatis之攔截--獲取執行SQL實現多客戶端數據同步

gin sign factor 方便 完成後 動態代理 exc batis 包安裝 最近的一個項目是將J2EE環境打包安裝在客戶端(使用 nwjs + NSIS 制作安裝包)運行, 所有的業務操作在客戶端完成, 數據存儲在客戶端數據庫中. 服務器端數據庫匯總各客戶端的數據進

SpringMVC自定義多個攔截執行順序

true pos out itl 表示 src blog lin 應用 一、正常流程下的攔截器(全部放行) 1.springMVC中攔截器實現這個接口HandlerInterceptor 第一個攔截器 HandlerInterceptor1 public cl

過濾器、攔截、AOP切面執行順序的比較

過濾器:基於 Servlet,通過函式回撥方式實現,可以過濾請求和圖片檔案等,每個請求一個過濾器只能過濾一次。   攔截器:基於 java 的反射機制,代理模式實現,只能攔截請求,可以訪問上下文等物件,功能強大,一個請求可多次攔截。   攔截器是 Spring 中