这篇文章主要介绍如何下载一张图片,有人可能说服务器都已经返回http的url图片地址给我了,我只要用glide、imageloader或者一些其他的图片加载工具就能获取到图片了,非也非也,就如博主之前公司,图片请求给的是图片的id,而不是url地址,比如2015_01_13_06af17b6-9b0f-11e4-a040-00163e020b37,根据id去请求图片,原理就是跟下载文件一样,下面贴上代码。
UpXlGetFile upXlGetFile = new UpXlGetFile();
upXlGetFile.setU("xxxxxx");
upXlGetFile.setK("xxxxxx");
upXlGetFile.setF("2015_01_13_06af17b6-9b0f-11e4-a040-00163e020b37");
upXlGetFile.setS("o");
Gson gson = new Gson();
String str = gson.toJson(upXlGetFile);
String baseStr = Base64.encodeToString(str.getBytes(),
Base64.DEFAULT);
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), baseStr);
Subscription subscription = clientApi.getXlGetFile(requestBody)
.compose(SchedulersCompat.<ResponseBody>applyIoSchedulers())
.subscribe(new Subscriber<ResponseBody>() {
@Override
public void onCompleted() {
hideLoadingDialog();
}
@Override
public void onError(Throwable e) {
showToast("更新失败");
hideLoadingDialog();
}
@Override
public void onNext(ResponseBody responseBody) {
boolean writtenToDisk = writeResponseBodyToDisk(responseBody);
}
});
会发现,跟之前的登录没什么两样,当然,都是数据的请求,只是变了一些参数而已,就连api接口也几乎一样。
@Multipart
@POST("/xl/file_get")
Observable<ResponseBody> getXlGetFile(@Part("p") RequestBody requestBody);
细心的人就会发现了,为啥现在返回的是ResponseBody了,说好的Response呢?我们将ResponseBody作为了返回类型。Retrofit会试图解析并转换它,所以你不能使用任何其他返回类型,否则当你下载文件的时候,是毫无意义的。