1. 程式人生 > >OkHttp攔截器新增頭部引數

OkHttp攔截器新增頭部引數

搭建環境

其實以前的一篇攔截器和這篇差不多 :詳細步驟

攔截器程式碼:

	/**
 * date:2018/12/12
 * author:輝(家輝輝輝)
 * function:攔截器
 */
public class Util_interptor implements Interceptor {

    //初始化Map集合
    Map<String,String> mParentMap;

    public Util_interptor(Map<String, String> parentMap) {
        mParentMap = parentMap;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        //拿到request
        Request requestFu = chain.request();
        //用request獲取網址
        String url = requestFu.url().toString();
        //判斷集合是否非空
        if (mParentMap!=null && mParentMap.size()>0){
            Request.Builder builder = requestFu.newBuilder();
            for(String user: mParentMap.keySet()){
                //新增頭部引數
                builder.addHeader(user,mParentMap.get(user));
            }

            Request build = builder.url(url).build();
            return chain.proceed(build);
        }
        return chain.proceed(requestFu);

    }
}

呼叫:

	//通過初始化的上下文得到資料
        SharedPreferences data = ConfigApplication.sContext.getSharedPreferences("data", 0);
        //傳參
        Map<String, String> map = new HashMap<>();
        map.put("userId", data.getString("userId", ""));
        map.put("sessionId", data.getString("sessionId", ""));
        //建立handler
        mHandler = new Handler(Looper.getMainLooper());
        //建立client
        mClient = new OkHttpClient.Builder()
                ....
                .addInterceptor(new Util_interptor(map))
                .build();

上下文:
在這裡插入圖片描述
SharedPreferences 的建立

//獲取pref物件
        mPreferences = getSharedPreferences("data", MODE_PRIVATE);
        //操作類
        mEditor = mPreferences.edit();

//存資料

			//其實就是存我們公共的引數
			mEditor.putString("userId", loginUrl_post_bean.getResult().getUserId() + "");
                        mEditor.putString("sessionId", loginUrl_post_bean.getResult().getSessionId() + "");
                        mEditor.commit();

還有第二種方法

/**
 * date:2018/12/12
 * author:輝(家輝輝輝)
 * function:攔截器
 */
public class Util_interptor implements Interceptor {



    @Override
    public Response intercept(Chain chain) throws IOException {
        //獲取原始的Request請求
        Request request = chain.request();

        //通過初始化的上下文得到資料
        SharedPreferences data = ConfigApplication.sContext.getSharedPreferences("data", 0);

        String userId = data.getString("userId", "");
        String sessionId = data.getString("sessionId", "");


        //如果有一個為空,不用新增請求頭
        if (TextUtils.isEmpty(userId) || TextUtils.isEmpty(sessionId)) {
            return chain.proceed(request);
        }

        Request build = request.newBuilder()
                .addHeader("userId", userId)
                .addHeader("sessionId", sessionId)
                .build();
        return chain.proceed(build);

    }
}