packageokhttpdemo.com.libs.net.httpBase;importandroid.util.Log;importorg.json.JSONObject;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.RandomAccessFile;importjava.nio.MappedByteBuffer;importjava.nio.channels.FileChannel;importokhttp3.Call;importokhttp3.Callback;importokhttp3.FormBody;importokhttp3.MediaType;importokhttp3.OkHttpClient;importokhttp3.Request;importokhttp3.RequestBody;importokhttp3.Response;importokhttp3.ResponseBody;importokhttpdemo.com.libs.net.httpBase.listener.HttpDownListener;/***@content: okhttp的下载功能工具类 (分别包含:1.无断点续传的get下载 2.有断点续传的get下载 3.无断点续传的post下载 4.有断点续传的post下载)
*@time:2018-12-12
*@build:z*/
public classOkHttpDownUtil {private static final String TAG = "OkHttpDownUtil";privateCall mCall;private long mAlreadyDownLength = 0;//已经下载长度
private long mTotalLength = 0;//整体文件大小
private int mSign = 0; //标记当前运行的是那个方法
private String mDownUrl;//下载网络地址
private File mPath;//文件保存路径
privateJSONObject mJson;private HttpDownListener mHttpDownListener;//下载进度接口回调
/*** 没有断点续传功能的get请求下载
*@paramdownUrl 下载网络地址
*@paramsaveFilePathAndName 保存路径*/
public void getDownRequest(final String downUrl, final File saveFilePathAndName, finalHttpDownListener listener) {
mSign= 1;
mDownUrl=downUrl;
mPath=saveFilePathAndName;
mHttpDownListener=listener;
mAlreadyDownLength= 0;
Request request= newRequest.Builder()
.url(mDownUrl)
.get()
.build();
mCall= OkHttpClientCreate.CreateClient().newCall(request);//构建了一个完整的http请求
mCall.enqueue(newCallback() {
@Overridepublic voidonFailure(Call call, IOException e) {if (mHttpDownListener != null) {
mHttpDownListener.onFailure(call, e);
}
}
@Overridepublic void onResponse(Call call, Response response) throwsIOException {
ResponseBody responseBody=response.body();
mTotalLength= responseBody.contentL