Retrofit 2 动态设置零件参数名称

Har*_*vat 4 post android multipartform-data retrofit2

我可以使用改造 2 动态地将参数名称设置为多部分请求的一部分吗,我正在寻找的是

@Multipart
@POST(UPDATE_PROFILE)
Call<SignUp> sendUpdateProfileRequest(
            @Part("profile_img") RequestBody img_file,
            @Part("DYNAMIC_PARAM_NAME") RequestBody first_name,...);
Run Code Online (Sandbox Code Playgroud)

其中 DYNAMIC_PARAM_NAME 类似于 id_seller/id_buyer/id_buyer,其余参数和请求 URL 保持不变。

在拨打电话时我可以在 Activity 或 Fragment 中实现此类功能吗?

Sha*_*nth 5

您可以尝试使用 Retrofit 的@PartMap注释来代替@Part. 只需更改 API 接口,如下所示:

@Multipart
@POST(UPDATE_PROFILE)
Call<SignUp> sendUpdateProfileRequest(
        @Part("profile_img") RequestBody img_file,
        @PartMap Map<String, RequestBody> params,  /* notice the change here */
        ...
);
Run Code Online (Sandbox Code Playgroud)

像这样使用它,

... // code
Map<String, RequestBody> params = new HashMap<>();

// prepare RequestBody
RequestBody someDataBody = ....;

// add it Map object
params.put("DYNAMIC_PARAM_NAME", someDataBody);

// pass it to request
FooApiInterface api = ....;

Call<FooResponse> call = api.sendUpdateProfileRequest(imageFile, params);
call.enqueue({/* implement response listener */});
Run Code Online (Sandbox Code Playgroud)

这应该对你有用。