在上一篇文章中,我们完成了Retrofit2.0接口的定义及基本的调用。
不知大家是否关注到DriveApi.uploadFileMutil()
这个接口方法需要传入两个MultipartBody.Part
对象,分别对应Metadata part和Media part,如何实现这里的Part对象呢?分为两部分:
Metadata Part
这部分比较简单,MultipartBody.Part.create()
方法直接创建即可:
1 | String content = "{\"name\": \"" + fileName + "\"}"; |
Media Part
需要我们自己实现一个RequestBody
对象,并重写里面的contentType()
和writeTo()
方法。代码可以参考StackOverflow上的这个回答:Is it possible to show progress bar when upload image via Retrofit 2
1 | public class ProgressRequestBody extends RequestBody { |
注意SO这个回答贴出的代码还有点问题,下面这句应该放在while循环的最下面,否则你最后一直只能收到99%。
1 | // update progress on UI thread |
Callback
然后实现UploadCallbacks
接口里的相关回调即可:
1 | class MyActivity extends AppCompatActivity implements ProgressRequestBody.UploadCallbacks { |
最后同样调用MultipartBody.Part.create()创建即可:
1 | MultipartBody.Part dataPart = MultipartBody.Part.create(mBody); |