【问题标题】:Android Retrofit Only one encoding annotation allowed [duplicate]Android Retrofit只允许一个编码注释[重复]
【发布时间】:2017-07-25 19:03:28
【问题描述】:

我想使用 Retrofit 进行 API 调用。 该调用基本上会发送一些数据以及图像。 这是我写的:

@POST("notes/new")
@Multipart
@FormUrlEncoded
Call<Note> getData (@Field("title") String title,
                    @Field("note") String note,
                    @Header("Authorization") String auth,
                    @Part MultipartBody.Part file,
                    @Part("file")RequestBody image);

可以看出,代码有两种编码方式:支持图片上传的@Multipart和使用@Field注解时需要用到@FormurlEncoded。因此,如果其中任何一个不存在,我将无法工作 YET 改造一次只允许一个 Encoding 注释。 我该怎么做?请帮忙

【问题讨论】:

    标签: android xml retrofit2


    【解决方案1】:

    我在尝试后找到了一个更好的方法。 希望这可以帮助那里的任何其他人

    @POST("notes/new")
    @Multipart
    Call<Note> getData (@Part ("title") String title,
                        @Part("note") String note,
                        @Header("Authorization") String auth,
                        @Part MultipartBody.Part file,
                        @Part("file")RequestBody image);
    

    【讨论】:

    • 无法正常工作,因为它正在创建我的参数的内部字符串。
    【解决方案2】:

    据我所知,您不能同时使用 FormUrlEncoded 和 Multipart。

    像这样定义你的界面:

    @POST("notes/new")
    @Multipart
    Call<Response> postFile(@Part MultipartBody.Part title,..., @Part MultipartBody.Part file,...);
    

    对于每个具有 @Field 的参数,您可以在调用服务的代码中执行此操作:

    String title = "MyTitle";
    final MultipartBody.Part titlePart = MultipartBody.Part.createFormData("title", title);
    

    【讨论】:

    • 这个是完整的答案
    猜你喜欢
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2013-05-31
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多