您的位置:首页 > 编程语言 > Java开发

Retrofit2+RxJava学习小计(一):单文件、多文件上传之填平的坑

2017-04-20 01:27 267 查看
从Eclipse转战AndroidStudio已经有两个月了。先夸夸Google亲儿子的强大吧,各种方便就不一一道来了。主要是现在的Android阵营已经不想前两年了。各种开源框架开源库。也正是如此,AndroidStudio导入开源的项目非常方便。自从Google源生不推荐使用HttpClient后就不能愉快使用Async-Http了。既然已经转战AndroidStudio,那就还是怪怪的使用新技术开发。Retrofit2+RxJava目前很火。理解起来也不难。但是上手确实各种坑。

今天就记录一下踩过的坑吧。最近在做一个上传数据的项目。虽然项目不大,但为了最求完美,也是为了熟悉新技术,直接选用了Retrofit2+RxJava进行开发。经过数周的学习,渐渐地了解了Retrofit2+RxJava组合起来的运作。可到文件上传部分时各种问题。网上的资料根本不齐,东拼西凑的算是看完了上传的流程。

也和一般的请求一样,先写网络接口,这里就只帖代码。

一、单文件上传

1、接口部分。网上搜出来的一般就是上边的用法。但是蛋疼的是!!!只能固定的名字上传!什么鬼!!!只能固定名字上传还怎么玩,所以推荐使用第二种方法,写起来也只多以上代码。

这里讲一下第一个接口中@Part里边的“file”和“filename”,“file”就是你的网络接口里边给你上传文件的时文件的字段,就类似于后边macAddress字段一个意思,服务器会把你的这个文件解析到“file”字段里边去。“filename”就是你这个文件上传到服务器的名字。



单文件上传的话最终推荐使用第二个接口。

2、代码实现。代码实现部分就很简单了,直接上图。

这里直说一下需要注意的地方,在构造MultipartBody.Part对象的三个参数,其实参数SDK中有说明,这里还是讲一下,其实就是和第一接口一样,第一个参数是字段,第二个参数是名字,把“1.txt”换成了这个文件的名字。



两个接口中后边的:
@Query("macAddress") String macAddress
就是服务器要求的一个参数,这里关于接口的参数可以网上查,

二、多文件上传

来了,坑来了。网上写的方法实话传不上去,后边携带的macAddress服务器都有打印,就是接收不到文件。

下面就在讲一下踩过的坑。

1、接口部分。是不是和单文件很像,是不是很简单。这里就不多讲了。



2、代码实现。直接贴代码,看清楚图片中划出的重点。



网上的代码贴出来的是我注视掉的代码,是上传不上的。

下面在说一下这段代码的含义吧,其实就是建立了一个Map,里边装载着你要上传的文件对象,

为何网上的代码无法上传,来一张图贴出开立马就能发现问题。(为啥我第一时间没有发现!/捂脸 /尴尬)



怎么样?这张图眼熟吧。没错就是单文件上传中有缺陷的接口。看出玄机了吧,这个在@Part的“filename”是没有
"\""
这玩意儿的。也正因为网上的代码中加了这玩意儿,而不是直接在“filename”后边跟的文件名字。所以导致死活传不上去。经过个吧小时的调试才把这个搞完,服务器端的程序也是我自己写的,如果大家想了解的话不妨加我微信公众吧,虽然服务端写的很简单,但对于初学者来学习Retrofit2+RxJava上传文件是搓搓有余的,也不至于各种资料找不到。

至此本次学习笔记已经整理完毕。希望在与大家分享的同时让自己也可以加深记忆。和大家一起学习一起进步。



扫描下方二维码即可关注我的公众号,想要实时接收博文推送,拿出手机扫码关注公众号吧~



微信扫码,即刻关注。

会不定期的更新相关内容哟 ^_^

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息