Retrofit2 学习-List多图片上传经验分享(一)

Hello,大家好最近在空余时间学习了一下Retrofit2,我们学习网络请求首先需要我们掌握的基本用法例如:Get和Post方法,然后就是单文件上传和多文件上传方式,下载文件,三级缓存等。
今天我主要分享一下多文件上传方式的操作:在retrofit官网中我们可以看到有关文件上传的操作,但是他是以多参数为例子实现的,在实际项目中后台接口是不会这样做的,我们公司的上传接口就是以List传递的。那这时候怎么办了?
不着急强大的Retrofit2肯定帮我写好了注解,大家先了解一下一些比较常见的注解:

1.Http请求方法:
Retrofit2 学习-List<File>多图片上传经验分享(一)_第1张图片
Paste_Image.png

这张图的注解是表示有哪些请求注解方式:当然了常用的也就是Get和Post请求方式:
@HTTP(method = "Get" ,path = "findrecommendgood.action" ,hasBody = false)
Call getComGoodInfoList(@Query("index") int index, @Query("size") int size);
这里@Http所需要传递的参数我们点击源码可以查看method所填写的事自定义请求要看后台是是什么样的请求方式,path:表示路径,hasBody:表示是否有请求体。
有兴趣的小伙伴们可以在看看其他的注解使用(个人觉得其他几个方法要和标记类来搭配使用才能实现我们所需要的功能):通过点击源码可以查看用法也很简单。

2.标记类
Retrofit2 学习-List<File>多图片上传经验分享(一)_第2张图片
Paste_Image.png

看到这个表格是不是脑子里面已经有了解决List集合的灵感了?来看这边的组合使用:
@Multipart
@POST("fatiedata2.action")
Call addCarInfo(@QueryMap Map parame, @PartMap Map file);
我们先来了解@Multipart注解意思:Denotes that the request body is multi-part. Parts should be declared as parameters and* annotated with {@link Part @Part}.
:意思就是请求体是一个参数集合,我们可以通过参数(集合参数)来赋值并且参数需要一@part(可以是partmap集合)来注解


Paste_Image.png

这边我们用到了Http请求方式@Post(源码讲解也是直接跟的事路径);
其他两个标记类实际项目接口中未涉及到就不讲解了

3.参数类:
Retrofit2 学习-List<File>多图片上传经验分享(一)_第3张图片
Paste_Image.png

@GET("findrecommendgood.action")
Call getComGoodInfoList(@Query("index") int index, @Query("size") int size);
表格已经讲的很详细的了我就不多写了,写的也不一定比表格清晰:


Retrofit2 学习-List<File>多图片上传经验分享(一)_第4张图片
Paste_Image.png
4.好了介绍完这些了我们进入正题吧,多图片上传:

上面我们已经介绍了标记类中的@Multipart那么需要我们传递的参数在参数类表格中也写的比较详细:@PartMap Map
我们再来看这个Map有哪些注意点需要我们了解:


Retrofit2 学习-List<File>多图片上传经验分享(一)_第5张图片
Paste_Image.png

首先我们需要实例化一下map集合,这边在设置参数的时候KEY的写法需要我们注意就是:后台接口所命名的list file0(file0就是后台list集合名称)➕“;”加上file的名称;有的人会问为什么需要这样写有兴趣的小伙伴可以去看看上传网络请求的源码,我自己也讲不清楚只能看的懂


Paste_Image.png

然后在实现接口:
// 执行请求
UpDataTouXiangService upDataTouXiangService=RetrofitApp.retrofit.create(UpDataTouXiangService.class);

Call call = upDataTouXiangService.addCarInfo(params, parts);
后面就不贴代码了,代码也不上传了毕竟接口是用的公司项目中的。其实关键代码还是蛮少的。
用到的依赖包
compile 'com.squareup.retrofit2:retrofit:+'
compile 'com.squareup.retrofit2:converter-gson:+'
compile 'com.google.code.gson:gson:+'
compile'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包

在Application中初始化的retrofit:
protected static Retrofit retrofit;
static {

retrofit=newRetrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl(Urls.BaseUrl)
.build();
}

好了今天文章就写到这里啦~谢谢大家

你可能感兴趣的:(Retrofit2 学习-List多图片上传经验分享(一))