在API之后,我要求编辑用户配置文件。我必须发送用户配置文件图片,所以我在API中使用了多部分。
@Multipart
@POST(ApiURLs.EDIT_USER_PROFILE)
Call<EditProfileModel> EditUserProfile (@Part("user_id) String userId ,
@Part("user_name") String userName ,
@Part("language_id") String languageId ,
@Part("state_id") String stateId ,
@Part MultipartBody.Part
profilePicture);
当服务调用时,请求的参数将类似
"user_id":"23""用户名":"Keval Shukla""language_id":"27""state_id":"53">
如何使用MultiPart删除双引号?
它必须像-
@Multipart
@POST(ApiURLs.EDIT_USER_PROFILE)
Call<EditProfileModel> EditUserProfile (
@Part("user_id") RequestBody userId ,
@Part("user_name") RequestBody userName ,
@Part("language_id") RequestBody languageId ,
@Part("state_id") RequestBody stateId ,
@Part RequestBody profilePicture);
并且,要创建requestBody,
File file = new File(imageURI.getPath());
RequestBody fbody = RequestBody.create(MediaType.parse("image/*"), file); // File requestBody
RequestBody userName = RequestBody.create(MediaType.parse("text/plain"), userNameSTRING); // String requestBody
您可以将文件以外的参数作为RequestBody
发送。
@Multipart
@POST(ApiURLs.EDIT_USER_PROFILE)
Call<EditProfileModel> EditUserProfile (@Part("user_id) RequestBody userId ,
@Part("user_name") RequestBody userName ,
@Part("language_id") RequestBody languageId ,
@Part("state_id") RequestBody stateId ,
@Part MultipartBody.Part profilePicture);
将String
转换为RequestBody
:
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"), userName); // Here userName is String
您这样做是错误的,当您使用MultiPart作为主体类型时,您必须指定每个请求参数的主体类型。
例如,您正在发送文件(图像、视频等)和字符串参数。因此,您需要指定所有参数并将其转换为特定的实体类型。
您需要将参数分为两部分,
1)MultipartBody-用于媒体文件
2) RequestBody-对于其他字符串或其他数据类型参数
例如
/*Create API Method*/
@Multipart
@POST("apiurl")
Call<Object> callMethodName(@Part("mobile_no") RequestBody mobile_no, /*String param */
@Part("password") RequestBody password, /*String param */
@Part MultipartBody.Part profile_img /*file param */);
我已经将Parse类型定义为multipart/form-data
,您可以根据自己的要求定义为,
public static final String MULTIPART_TYPE = "multipart/form-data";
现在创建如下请求参数,/*添加字符串参数*/RequestBody reqNumber=RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE),number.toString());RequestBody reqPass=RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE),pass.toString());
/* Adding File*/
File file = new File(selectedImagePath);
RequestBody requestFile = RequestBody.create(MediaType.parse(Constants.MULTIPART_TYPE), file);
bodyFile = MultipartBody.Part.createFormData("profile_img", file.getName(), requestFile);
作为最后一步,您需要将请求参数传递给API调用方法,如下所示,这样它就可以识别参数并将其发送到服务器。
/* Call API Method */
RestClient.getApiClient().callMethodName(reqNumber, reqPass, bodyFile);
使用RequestBody而不是String。
@Part("user_id") RequestBody user_id,
称之为
String userId= "123456";
RequestBody id =
RequestBody.create(
okhttp3.MultipartBody.FORM, userId);