前言
android网络请求库当前最常使用的就是retrofit2,retrofit2调用接口返回的数据搭配GsonConverterFactory可以很简单的就拿到需要的对象.但是某些情况下我们需要下载文件,因为已经用了retrofit2就想直接使用它进行文件下载
使用(上代码)
接口:
/**
* 下载文件
* 如果下载大文件的一定要加上 @Streaming 注解
*
* @param fileUrl 文件的路径
* @return 请求call
*/
@Streaming
@GET
Call<ResponseBody> downloadOtaFileLoad(@Url String fileUrl);
调用:
/**
* 下载文件
*
* @param listener 接口
*/
public void downloadFile(String url, OnResponseListenerBase listener) {
Call<ResponseBody> responseBodyCall = AppAPIServiceIm.getInstance().httpPost().downloadOtaFile(url);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (listener != null) {
if (response.isSuccessful()) {
listener.onSuccess(response.body());
} else {
HttpLog.e("异常:" + response.toString());
listener.onFail(null);
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
HttpLog.e("异常:" + t.toString());
if (listener != null) {
listener.onFail(null);
}
}
});
}
public class APIServiceIm {
private static APIServiceIm sAPIServiceIm;
private APIService mAPIService;
public static APIServiceIm getInstance() {
if (sAPIServiceIm == null) {
sAPIServiceIm = new APIServiceIm();
}
return sAPIServiceIm;
}
/**
* 网络请求初始化,获得请求对象
*/
public APIService httpPost() {
if (mAPIService == null) {
synchronized (APIServiceIm.class) {
if (mAPIService == null) {
//获取实例
Retrofit retrofit = RetrofitUtils.getRetrofit();
mAPIService