封裝Okhttp+請求攔截器+日誌攔截器

1.依賴
implementation ‘com.squareup.okhttp3:okhttp:3.12.0’
implementation ‘com.orhanobut:logger:2.1.1’

2.Okhttputil
public class OkUtil {
private static Gson gson = new Gson();
private static final String MEDIA_TYPE=“application/json;charset=utf-8”;
private static final String METHOD_GET=“GET”;
private static final String METHOD_POST=“POST”;
private static final String METHOD_PUT=“PUT”;
private static final String METHOD_DELETE=“DELETE”;
private static OkHttpClient okHttpClient;
private OkUtil(){}
public static void init(Map headers){
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.readTimeout(3000,TimeUnit.MILLISECONDS);
builder.writeTimeout(3000,TimeUnit.MILLISECONDS);
builder.connectTimeout(5000,TimeUnit.MILLISECONDS);
builder.addInterceptor(new OKHeaderInterceptor(headers));//添加請求頭
builder.addInterceptor(new OkLogInterceptor());//添加日誌攔截器
builder.retryOnConnectionFailure(false);
okHttpClient = builder.build();
}
public static Request createRequest(String url,String method,Map map){
FormBody formBody =null;
if (map!=null){
FormBody.Builder builder = new FormBody.Builder();
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
String key = (String) iterator.next();
String value = (String) map.get(key);
builder.add(key,value);
}
formBody = builder.build();
}
Request.Builder builder = new Request.Builder().url(url);
Request request=null;
switch (method){
case METHOD_GET:
request = builder.build();
break;
case METHOD_POST:
request =builder.post(formBody).build();
break;
case METHOD_PUT:
if (formBody!=null){
request=builder.put(formBody).build();
}
break;
case METHOD_DELETE:
if (formBody!=null){
request=builder.delete(formBody).build();
}else {
request=builder.delete().build();
}
break;
}
return request;
}
public static void enqueuePost(String url, Map map, Callback callback){
Request request = createRequest(url,METHOD_POST,map);
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
public static void enqueueGet(String url,Callback callback){
Request request = createRequest(url,METHOD_GET,null);
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
public static Response excutePost(String url,Map map){
Request request =createRequest(url,METHOD_POST,map);
Call call = okHttpClient.newCall(request);
Response response=null;
try {
response=call.execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
public static Response excuteGet(String url) throws IOException {
Request request=createRequest(url,METHOD_GET,null);
Call call = okHttpClient.newCall(request);
Response response=null;
response=call.execute();
return response;
}
}

3.OKHeaderInterceptor
/**

  • 請求攔截器
    */
    public class OKHeaderInterceptor implements Interceptor {
    private Map<String,String> headers;

    public OKHeaderInterceptor(Map<String, String> headers) {
    if (headers!=null){
    this.headers = headers;
    }
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();
    Request.Builder builder = request.newBuilder();
    //添加請求頭
    builder.addHeader(“token”,“this is token”);
    builder.addHeader(“version”,“version1.0”);
    builder.addHeader(“platform”,“android”);
    request=builder.build();
    return chain.proceed(request);
    }
    }

4.OkLogInterceptor
/**

  • 日誌攔截器
    */
    public class OkLogInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();
    String method = request.method();
    HttpUrl url = request.url();
    LogUtil.d(“本次請求”,“ulr:”+url.toString()+“method:”+method);
    Headers headers = request.headers();
    Set names = headers.names();
    Iterator iterator = names.iterator();
    while (iterator.hasNext()){
    String next = iterator.next();
    String value = headers.get(next);
    LogUtil.d(next+":"+value);
    }
    return chain.proceed(request);
    }
    }

5.LogUtil
public class LogUtil {
public static void init(){
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(false)
.methodCount(0)
.methodOffset(7)
.logStrategy(null)
.tag(“baway”)
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
}
public static void json(String json){
if (TextUtils.isEmpty(json)){
Logger.json(json);
}
}
public static void json(String tag,String json){
if (!TextUtils.isEmpty(json)){
Logger.t(tag).json(json);
}
}
public static void d(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.d(msg);
}
}
public static void d(String tag,String msg){
if (!TextUtils.isEmpty(msg)){
Logger.t(tag).d(msg);
}
}
public static void e(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.e(msg);
}
}
public static void w(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.w(msg);
}
}
public static void v(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.v(msg);
}
}
public static void i(String msg){
if (!TextUtils.isEmpty(msg)){
Logger.i(msg);
}
}

}

6.App初始化
public class App extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context=this;
LogUtil.init();
Fresco.initialize(this);
initHttpHeader();
}

private void initHttpHeader() {
    HashMap<String,String> map = new HashMap<>();
    map.put("token","this is token");
    map.put("version","version1.0");
    map.put("platform","android");
    OkUtil.init(map);
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章