亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

深入了解OkHttp3之Interceptors

2019-10-21 21:31:16
字體:
來源:轉載
供稿:網友

OKHttp官網上面介紹:攔截器是一種強大的機制,可以監視,重寫和重試調用。這里我們主要對攔截器的網絡請求頭和數據請求的封裝。

網絡請求頭攔截器

在Android應用中,我們通常需要獲取用戶手機的IMEI值和其他一些常用的參數,如果把他們封裝到請求頭里面的話會非常的方便。

既然是自定義攔截器,我們首先肯定要繼承OKHttp的攔截器,把這個自定義類設置成 final 類型的防止其他類繼承。

這里需要在父類的intercept(Chain chain)方法中進行操作。在方法里面得Request.Builder對象然后添加請求頭。

創建一個BaseParam 對象,對請求頭的參數進行封裝。

public final class HeaderInterceptorTest implements Interceptor {  /**   * 請求頭參數基礎參數   */  private static final String HEADER_BASE_PARAM = "baseParam";  private static String BASE_PARAM;  @Override  public Response intercept(Chain chain) throws IOException {    Request.Builder builder = chain.request().newBuilder();    builder.addHeader(HEADER_BASE_PARAM, BASE_PARAM);    return chain.proceed(builder.build());  }  public static void initBaseParam(Context context) {    BaseParam baseParam = new BaseParam();    String imei;    String imsi;    try {      imei = DeviceInfoUtil.getIMEI(context);    } catch (Exception e) {      imei = null;    }    if (null == imei || imei.equals("")) {      imei = DeviceInfoUtil.getDeviceID(context);      imsi = DeviceInfoUtil.getDeviceID(context);    } else {      imei = DeviceInfoUtil.getIMEI(context);      imsi = DeviceInfoUtil.getIMSI(context);    }    baseParam.setImei(imei);    baseParam.setImsi(imsi);    baseParam.setMac(DeviceInfoUtil.getWifiMAC(context));    baseParam.setVersion(DeviceInfoUtil.getVersion(context));    baseParam.setModel(DeviceInfoUtil.getModel());    baseParam.setBrand(DeviceInfoUtil.getBrand());    BASE_PARAM = new Gson().toJson(baseParam).toString();  }  private static class BaseParam {    /**     * imei :     * imsi :     * mac :     * version :     * model :     * brand :     * city :     */    private String imei;    private String imsi;    private String mac;    private String version;    private String model;    private String brand;    private String city;    public String getImei() {      return imei;    }    public void setImei(String imei) {      this.imei = imei;    }    public String getImsi() {      return imsi;    }    public void setImsi(String imsi) {      this.imsi = imsi;    }    public String getMac() {      return mac;    }    public void setMac(String mac) {      this.mac = mac;    }    public String getVersion() {      return version;    }    public void setVersion(String version) {      this.version = version;    }    public String getModel() {      return model;    }    public void setModel(String model) {      this.model = model;    }    public String getBrand() {      return brand;    }    public void setBrand(String brand) {      this.brand = brand;    }    public String getCity() {      return city;    }    public void setCity(String city) {      this.city = city;    }  }}

數據請求攔截器

在進行數據請求的時候,一般都會定義一種固定的請求格式。在這里我們直接通過攔截器,將這個固定的格式定義好,這樣使用起來可以統一管理。具體的使用方法其實和上面一樣。

主要注意的是先得到,請求時設置的請求體,然后讓請求的數據封裝到和后端設置的請求格式里面。

public class HttpDataPackInterceptorTest implements Interceptor {  @Override  public Response intercept(Chain chain) throws IOException {    Request request = chain.request();    Request.Builder requestBuilder = chain.request().newBuilder();    //請求數據處理    if (request.url().toString().contains("uploads")) {      //特殊接口的參數不需要處理的    } else {      //需要處理請求參數的      if (request.body() instanceof FormBody) {        FormBody.Builder newFormBody = new FormBody.Builder();        //得到請求時設置的請求體        FormBody oldFormBody = (FormBody) request.body();        Buffer buffer = new Buffer();        oldFormBody.writeTo(buffer);        String postParams = JsonUtils.getJsonStrFromPostParams(buffer.readString(Charset.forName("UTF-8")));        String data = URLDecoder.decode(postParams, "UTF-8");        if (TextUtils.isEmpty(data)) {          newFormBody.add("data", "");        } else {          //將請求的數據封裝          newFormBody.add("data", data);        }        requestBuilder.method(request.method(), newFormBody.build());      }    }    return chain.proceed(requestBuilder.build());  }}

代碼中調用

在創建OkHttpClient 對象的時候,調用 addInterceptor()方法 添加倆個攔截器。

private OkHttpClient client;  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_okhttp);    HeaderInterceptorTest.initBaseParam(this);    client= new OkHttpClient()        .newBuilder()        .addInterceptor(new HeaderInterceptorTest())        .addInterceptor(new HttpDataPackInterceptorTest())        .connectTimeout(60, TimeUnit.SECONDS)        .writeTimeout(60, TimeUnit.SECONDS)        .readTimeout(60, TimeUnit.SECONDS).build();    okhttpAsyncPost();  }  private void okhttpAsyncPost(){    RequestBody formBody = new FormBody.Builder()        .add("page", "1")        .add("count", "2")        .add("type","video")        .build();    Request request = new Request.Builder()        .url("https://api.apiopen.top/getJoke")        .post(formBody)        .build();    client.newCall(request).enqueue(new Callback() {      @Override      public void onFailure(Call call, IOException e) {      }      @Override      public void onResponse(Call call, Response response) throws IOException {        Log.e("error","結果"+response.body().string());        Log.e("error","方法"+response.request().toString());        Log.e("error","請求頭"+response.request().headers().toString());      }    });  }

打印的日志

結果{"status":200,"msg":"OK","data":"{/"count/":/"2/",/"page/":/"1/",/"type/":/"video/"}"}
方法Request{method=POST, url=https://www.26uuun.com/list, tags={}}
請求頭baseParam: {"brand":"Xiaomi","city":"/u4e1c/u4eac","imei":"9fc70b16bf169075f556e6d67be9ef1a","imsi":"9fc70b16bf169075f556e6d67be9ef1a","mac":"02:00:00:00:00:00","model":"Mi Note 2","version":"1.0"}

OK,OKHttp3中Interceptors配置完成,小伙伴們,可以設置自己不同需求的其他的攔截器添加到請求中。

最近我會寫很多關于Android常用控件的使用,里面都是一些很有用的知識,如果你感覺有用,請給我一個star,謝謝。 代碼實例 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品中文在线| 97色在线观看| 亚洲国产精彩中文乱码av在线播放| 国产视频精品va久久久久久| 亚洲女同性videos| 国产69久久精品成人看| 精品成人在线视频| 久久久久久久电影一区| 国产精品va在线播放| 国产欧美精品在线| 在线观看免费高清视频97| 国产a∨精品一区二区三区不卡| 国产欧美 在线欧美| 日韩专区在线播放| 欧美日韩视频在线| 亚洲精品久久视频| 亚洲在线免费看| 欧美成人在线网站| 久久手机精品视频| 黑人巨大精品欧美一区二区免费| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久亚洲精品一区| 中文综合在线观看| 欧美激情va永久在线播放| 日韩有码在线电影| 中文字幕精品一区久久久久| 91精品国产91久久久久久| 国产在线a不卡| 欧美激情第三页| 国产剧情日韩欧美| 91麻豆国产精品| 91高潮精品免费porn| 国产精品丝袜久久久久久高清| 亚洲高清一二三区| 国产精品露脸自拍| 亚洲视频视频在线| 欧美有码在线观看视频| 日韩av成人在线观看| 日本久久亚洲电影| 精品国产91久久久久久老师| 九九热在线精品视频| 一区二区三区久久精品| 91精品国产综合久久香蕉| 久久久久久午夜| 国产精品久久久久久久久借妻| 欧美一级免费看| 欧美日韩色婷婷| 成人黄色av播放免费| 韩国精品美女www爽爽爽视频| 日韩小视频在线| 欧美高清理论片| 欧美亚洲日本黄色| 国产视频在线一区二区| 青草青草久热精品视频在线网站| 国产91精品久| 国产成人久久精品| 国产亚洲欧美日韩精品| 亚洲一区av在线播放| 日韩中文在线视频| 亚洲天堂免费观看| 欧美另类xxx| 国产精品一久久香蕉国产线看观看| 久久综合五月天| 国产精品色婷婷视频| 亚洲精品日韩久久久| 在线看欧美日韩| 美女国内精品自产拍在线播放| 日韩av影片在线观看| 欧美高清视频一区二区| 国产一区视频在线播放| 日韩成人网免费视频| 亚洲精品美女久久久久| 久久97久久97精品免视看| 精品香蕉一区二区三区| 国产成人精品日本亚洲| 97香蕉超级碰碰久久免费软件| 成人a在线视频| 午夜精品在线观看| 懂色av一区二区三区| 日韩成人激情视频| 国产午夜精品麻豆| 亚洲精品国产成人| 最新国产精品亚洲| 亚洲欧美中文另类| 精品国产一区av| 久久国产精品久久精品| 久久久久久久久久久人体| 国产精品美乳在线观看| 亚洲大胆人体视频| 97色伦亚洲国产| 欧美日韩免费一区| 欧美性猛交xxxx乱大交极品| 九色91av视频| 日韩高清免费观看| 亚洲国产成人久久综合| 色噜噜狠狠狠综合曰曰曰88av| 亚洲综合第一页| 精品国产91久久久久久| 久热精品在线视频| 粉嫩老牛aⅴ一区二区三区| 亚洲视频在线观看视频| 国产va免费精品高清在线观看| 午夜精品一区二区三区av| 欧美精品国产精品日韩精品| 久久久国产一区| 色婷婷**av毛片一区| 在线观看成人黄色| 久久夜色精品亚洲噜噜国产mv| 精品久久久久久中文字幕一区奶水| 性欧美视频videos6一9| 国产精品久久久久久亚洲影视| 77777亚洲午夜久久多人| 夜夜嗨av一区二区三区免费区| 色噜噜狠狠狠综合曰曰曰| 欧美激情国产日韩精品一区18| 国精产品一区一区三区有限在线| 欧美成人免费在线观看| 91久久精品视频| 国产最新精品视频| 久久久久久久久久久久av| 亚洲欧美综合另类中字| 欧美成人精品一区| 欧美激情视频网站| 国产一区二区美女视频| 欧美色视频日本高清在线观看| 亚洲第一页在线| 国产精品久久久一区| 日韩精品极品在线观看播放免费视频| 亚洲偷欧美偷国内偷| 少妇激情综合网| www.99久久热国产日韩欧美.com| 91国内揄拍国内精品对白| 久久99国产精品自在自在app| 国产97色在线|日韩| 日本乱人伦a精品| 久久精品99无色码中文字幕| 成人一区二区电影| 成人激情视频免费在线| 精品久久久国产| 国产69精品久久久| 精品久久在线播放| 久久久国产精品免费| 久久精品视频导航| 成人a视频在线观看| 亚洲精品98久久久久久中文字幕| 欧美在线一区二区视频| 国产精品久久一| 爽爽爽爽爽爽爽成人免费观看| 精品人伦一区二区三区蜜桃网站| 日日骚久久av| 欧美日韩一区二区免费视频| 在线亚洲国产精品网| 91精品国产色综合久久不卡98口| 国产精品第七影院| 久久久www成人免费精品| 欧美日韩亚洲激情| 欧美成人激情视频免费观看| 日韩成人av在线播放| 国产精品一区久久久| 欧美午夜激情小视频| 精品久久久久久久久久| 国产精品国产自产拍高清av水多| 国产精品69精品一区二区三区| 久久久极品av|