android之okhttp实现上传文件带进度条
【1】封装okhttp
public class OkHttpTool {
//日志标志
private static String TAG = "OkHttpTool";
//OkHttpClient类
private static final OkHttpClient myOkHttpClient;
static {
//========日志拦截器=========
//Log拦截器
HttpLoggingInterceptor loggingInterceptor =
new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(@NonNull String message) {
Log.i(TAG, message);
}
});
//设置日志显示级别
HttpLoggingInterceptor.Level level = HttpLoggingInterceptor.Level.BODY;
loggingInterceptor.setLevel(level);
//========cookie处理--让服务端记住app
//这里是设置cookie的,但是并没有做持久化处理;只是把cookie保存在内存中
CookieJar cookieJar=new CookieJar() {
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
//保存cookie
@Override
public void saveFromResponse(@NonNull HttpUrl url, @NonNull List<Cookie> cookies) {
cookieStore.put(url.host(), cookies);
}
//获取cookie
@Override
public List<Cookie> loadForRequest(@NonNull HttpUrl url) {
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
};
//创建OkHttpClient
myOkHttpClient = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)//连接超时
.writeTimeout(60, TimeUnit.SECONDS)//写入超时
.readTimeout(60, TimeUnit.SECONDS)//读取超时
.addInterceptor(loggingInterceptor)//添加日志处理拦截器
.cookieJar(cookieJar)
.build();
}
//================对外方法=====================
//OkHttp请求回调中response.body().string()只能有效调用一次
//=====获取服务器响应信息回调接口======
public interface ResponseCallback {
void onResponse(boolean isSuccess, int responseCode, String response, Exception exception);
}
/**
* POST 请求 文件上传显示进度条
* @param url{String} 请求地址
* @param parameters{Map<String, Object>} 请求参数
* @param files{Map<String, File>} 上传的文件列表
* @param