110 lines
3.3 KiB
Plaintext
Executable File
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) {
|
|
}
|
|
}
|
|
}
|
|
}
|