XiMengJianYu/.svn/pristine/31/3162baa0a5b50fdb980047a26a2008df5986f4c2.svn-base
2023-04-17 17:58:44 +08:00

110 lines
3.3 KiB
Plaintext
Executable File

package com.cm.utils.net.callback;
import android.os.Handler;
import com.cm.utils.net.response.DownloadResponseHandler;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;
/**
* Created by Xuer on 2017/3/8.
*/
public class DownloadCallback implements Callback {
private Handler mHandler;
private DownloadResponseHandler mDownloadResponseHandler;
private String mFileDir;
private String mFilename;
public DownloadCallback(Handler handler, DownloadResponseHandler downloadResponseHandler,
String filedir, String filename) {
mHandler = handler;
mDownloadResponseHandler = downloadResponseHandler;
mFileDir = filedir;
mFilename = filename;
}
@Override
public void onFailure(Call call, final IOException e) {
// LogUtils.e("onFailure", e);
mHandler.post(new Runnable() {
@Override
public void run() {
mDownloadResponseHandler.onFailure(e.toString());
}
});
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
File file = null;
try {
file = saveFile(response, mFileDir, mFilename);
} catch (final IOException e) {
// LogUtils.e("onResponse saveFile fail", e);
mHandler.post(new Runnable() {
@Override
public void run() {
mDownloadResponseHandler.onFailure("onResponse saveFile fail." + e.toString());
}
});
}
final File newFile = file;
mHandler.post(new Runnable() {
@Override
public void run() {
mDownloadResponseHandler.onFinish(newFile);
}
});
} else {
// LogUtils.e("onResponse fail status=" + response.code());
mHandler.post(new Runnable() {
@Override
public void run() {
mDownloadResponseHandler.onFailure("fail status=" + response.code());
}
});
}
}
//保存文件
private File saveFile(Response response, String filedir, String filename) throws IOException {
InputStream is = null;
byte[] buf = new byte[2048];
int len;
FileOutputStream fos = null;
try {
is = response.body().byteStream();
File dir = new File(filedir);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, filename);
fos = new FileOutputStream(file);
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
return file;
} finally {
try {
if (is != null) is.close();
} catch (IOException e) {
}
try {
if (fos != null) fos.close();
} catch (IOException e) {
}
}
}
}