Android Retrofit2中Part和PartMap的区别

Posted

技术标签:

【中文标题】Android Retrofit2中Part和PartMap的区别【英文标题】:Difference between Part and PartMap in Retrofit2 in Android 【发布时间】:2018-11-07 16:03:23 【问题描述】:

在我的应用程序中,我希望使用Retrofit2 将图像从手机上传服务器。 对于这项工作,我从互联网上找到了一些来源,但在一个来源中使用这个:

public interface RetrofitInterface 
    @Multipart
    @POST("/images/upload")
    Call<Response> uploadImage(@Part MultipartBody.Part image);

在下面的其他来源中:

public interface ApiConfig 

    @Multipart
    @POST("images/upload_image.php")
    Call<ServerResponse> upload(
            @PartMap Map<String, RequestBody> map);

在第一个来源中使用@Part MultipartBody.Part image,在第二个来源中使用@PartMap Map&lt;String, RequestBody&gt; map

两者有什么区别?

我用哪个更好?

【问题讨论】:

***.com/questions/39953457/… 的可能重复项 @Gokulraj,谢谢亲爱的。但我的问题是上述代码有什么区别? 查看此文档-square.github.io/retrofit/2.x/retrofit/retrofit2/http/… PartMap 不支持多个同名部件 @AD10,谢谢。我只想发送图片。 【参考方案1】:

两者有什么区别?

@Part is used during this scenario, 当您有一个多部分请求并且您事先知道需要发送到服务器的文件数量时,您可以使用 @part 注释声明它。

@PartMap is used during this scenario, 当您不知道必须在同一密钥下发送到服务器的部件数量时,我们使用 @PartMap 注释

现在回答你的问题,我用哪个更好?

如果您必须上传一组有限的图像,请使用@Part 方法,否则请使用@PartMap。

【讨论】:

感谢亲爱的朋友的帮助。我只想上传图片而不发送任何数据。 (只是图像和图像名称) 。为此我可以使用此代码:@Part MultipartBody.Part image) 吗? 谢谢亲爱的朋友 很高兴我能帮助@Dr.Kong【参考方案2】:

您可以查看改造 2 文档以了解零件和零件图之间的差异:

Differences between Part & PartMap for uploading files

改造文档: 如果您只需要通过文件传递一个或两个描述,则可以将其声明为 @Part 在您的服务中。 这适用于小型用例,但如果您需要发送多个属性,它会变得非常混乱,尤其是如果并非所有属性都始终设置。

Retrofit 提供了一个简单的解决方案,它使上传非常可定制:@PartMap。 @PartMap 是一个请求参数的附加注解,它允许我们指定在运行时我们发送多少和哪些部分。如果您的表单很长,这将非常有用,但实际上只有少数输入字段值被发送。

【讨论】:

感谢亲爱的朋友的帮助。我只想上传图片而不发送任何数据。 (只是图像和图像名称) 。为此,我可以使用此代码:@Part MultipartBody.Part image) 吗?

以上是关于Android Retrofit2中Part和PartMap的区别的主要内容,如果未能解决你的问题,请参考以下文章

Part6 数组指针与字符串 6.6指针与数组

ProGuard for Android 和 Retrofit2 Converter Gson?

Android实战——Retrofit2的使用和封装

Android Retrofit2 0 查看log和JSON字符串(HttpLoggingInterceptor)

Android Retrofit2.0 查看log和JSON字符串(HttpLoggingInterceptor)

Android 网络框架之Retrofit2使用详解及从源码中解析原理